๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[BAEKJOON python] 23290_๋ง๋ฒ์ฌ ์์ด์ ๋ณต์ ๋ณธ๋ฌธ
๐ฆฅ ์ฝํ
/BAEKJOON
[BAEKJOON python] 23290_๋ง๋ฒ์ฌ ์์ด์ ๋ณต์
์ง์ง์ํ์นด 2023. 4. 8. 00:04728x90
๋ฐ์ํ
๋ง๋ฒ์ฌ ์์ด์ ๋ณต์
4 × 4 ํฌ๊ธฐ์ ๊ฒฉ์์์ ์ฐ์ต
(r, c)๋ ๊ฒฉ์์ rํ c์ด
๊ฒฉ์์ ๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์ (1, 1)์ด๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ซ ์นธ์ (4, 4)
๊ฒฉ์์๋ ๋ฌผ๊ณ ๊ธฐ M๋ง๋ฆฌ
๋ฌผ๊ณ ๊ธฐ๋ ๊ฒฉ์์ ์นธ ํ๋์ ๋ค์ด๊ฐ ์์ผ๋ฉฐ, ์ด๋ ๋ฐฉํฅ์ ๊ฐ์ง๊ณ ์์
์ด๋ ๋ฐฉํฅ์ 8๊ฐ์ง ๋ฐฉํฅ(์ํ์ข์ฐ, ๋๊ฐ์ ) ์ค ํ๋
๋ง๋ฒ์ฌ ์์ด์ ์์ด๋ ๊ฒฉ์์ ํ ์นธ์ ๋ค์ด๊ฐ์์
๋ ์ด์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ฐ์ ์นธ์ ์์ ์๋ ์์ผ๋ฉฐ, ๋ง๋ฒ์ฌ ์์ด์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ฐ์ ์นธ์ ์์ ์๋ ์์
์์ด์ ๋ง๋ฒ ์ฐ์ต ํ ๋ฒ
1) ์์ด๊ฐ ๋ชจ๋ ๋ฌผ๊ณ ๊ธฐ์๊ฒ ๋ณต์ ๋ง๋ฒ์ ์์
๋ณต์ ๋ง๋ฒ์ ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์, 5) ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ณต์ ๋์ด ์นธ์ ๋ํ๋จ
2) ๋ชจ๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ํ ์นธ ์ด๋
์์ด๊ฐ ์๋ ์นธ, ๋ฌผ๊ณ ๊ธฐ์ ๋์๊ฐ ์๋ ์นธ, ๊ฒฉ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์นธ์ผ๋ก๋ ์ด๋ํ ์ ์์
๊ฐ ๋ฌผ๊ณ ๊ธฐ๋ ์์ ์ด ๊ฐ์ง๊ณ ์๋ ์ด๋ ๋ฐฉํฅ์ด ์ด๋ํ ์ ์๋ ์นธ์ ํฅํ ๋๊น์ง ๋ฐฉํฅ์ 45๋ ๋ฐ์๊ณ ํ์
์ด๋ํ ์ ์๋ ์นธ์ด ์์ผ๋ฉด ์ด๋์ ํ์ง ์์
3) ์์ด๊ฐ ์ฐ์ํด์ 3์นธ ์ด๋
์์ด๋ ํ์ฌ ์นธ์์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ์ผ๋ก ์ด๋
์ด๋ํ๋ ์นธ ์ค์ ๊ฒฉ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์นธ์ด ์์ผ๋ฉด, ๊ทธ ๋ฐฉ๋ฒ์ ๋ถ๊ฐ๋ฅํ ์ด๋ ๋ฐฉ๋ฒ
์ด๋ํ๋ ์ค์ ์์ด๊ฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ๊ฐ์ ์นธ์ผ๋ก ์ด๋ํ๊ฒ ๋๋ค๋ฉด, ๊ทธ ์นธ์ ์๋ ๋ชจ๋ ๋ฌผ๊ณ ๊ธฐ๋ ๊ฒฉ์์์ ์ ์ธ๋๋ฉฐ, ์ ์ธ๋๋ ๋ชจ๋ ๋ฌผ๊ณ ๊ธฐ๋ ๋ฌผ๊ณ ๊ธฐ ๋์๋ฅผ ๋จ๊น
๊ฐ๋ฅํ ์ด๋ ๋ฐฉ๋ฒ ์ค์์ ์ ์ธ๋๋ ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ๊ฐ์ฅ ๋ง์ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋
๊ทธ๋ฌํ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ๊ฐ์ง์ธ ๊ฒฝ์ฐ ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์๋ ๋ฐฉ๋ฒ์ ์ด์ฉ
4) ๋ ๋ฒ ์ ์ฐ์ต์์ ์๊ธด ๋ฌผ๊ณ ๊ธฐ์ ๋์๊ฐ ๊ฒฉ์์์ ์ฌ๋ผ์ง
5) 1) ์์ ์ฌ์ฉํ ๋ณต์ ๋ง๋ฒ์ด ์๋ฃ
๋ชจ๋ ๋ณต์ ๋ ๋ฌผ๊ณ ๊ธฐ๋ 1)์์์ ์์น์ ๋ฐฉํฅ์ ๊ทธ๋๋ก ๊ฐ๊ฒ ๋จ
๊ฒฉ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ์์น, ๋ฐฉํฅ ์ ๋ณด์ ์์ด์ ์์น, ์ฐ์ต ํ์ S
S๋ฒ ์ฐ์ต์ ๋ชจ๋ ๋ง์ณค์๋, ๊ฒฉ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ์
์ฒซ์งธ ์ค์ ๋ฌผ๊ณ ๊ธฐ์ ์ M, ์์ด๊ฐ ๋ง๋ฒ์ ์ฐ์ตํ ํ์ S
๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ๋ฌผ๊ณ ๊ธฐ์ ์ ๋ณด fx, fy, d
(fx, fy)๋ ๋ฌผ๊ณ ๊ธฐ์ ์์น๋ฅผ ์๋ฏธํ๊ณ , d๋ ๋ฐฉํฅ
1๋ถํฐ ์์๋๋ก ←, โ, ↑, โ, →, โ, ↓, โ
๋ง์ง๋ง ์ค์๋ sx, sy๊ฐ ์ฃผ์ด์ง๋ฉฐ, ์์ด๊ฐ (sx, sy)์ ์์
๊ฒฉ์ ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ์๊ฐ ํญ์ 1,000,000 ์ดํ์ธ ์ ๋ ฅ๋ง ์ฃผ์ด์ง
# ๋ณต์ -> ๋ฌผ๊ณ ๊ธฐ ์ด๋ -> ์์ด์ ์ด๋ -> ๋ณต์ ๋ง๋ฒ
# 1) ๋ฌผ๊ณ ๊ธฐ ์์ง์
def move_fish(arr):
ret = [[[] for _ in range(4)] for _ in range(4)]
for x in range(4):
for y in range(4):
while arr[x][y]:
d = arr[x][y].pop()
for i in range(d, d - 8, -1):
i %= 8
nx, ny = x + delta[i][0], y + delta[i][1]
# ์์ด ์กด์ฌ X, ๋ฒ์ ์๋์, ๋์ ์๋จ X
if (
nx, ny
) != shark and 0 <= nx < 4 and 0 <= ny < 4 and not smell[
nx][ny]:
ret[nx][ny].append(i)
break
else:
ret[x][y].append(d)
return ret
# 2) ์์ด ์์ง์
def move_shark(s):
x, y = s
q = []
# ํ์ฌ์ขํ, ๋ฐฉ๋ฌธ์ขํ, ๋ฐฉํฅ์ ์, ์ด๊ฐฏ์,
q.append((x, y, set(), '', 0))
for _ in range(3):
for _ in range(len(q)):
x, y, visited, dir_score, cnt = q.pop(0)
for i in range(1, 5):
nx, ny = x + s_delta[i][0], y + s_delta[i][1]
if 0 <= nx < 4 and 0 <= ny < 4:
if (nx, ny) in visited:
q.append((nx, ny, visited, dir_score + str(i), cnt))
else:
q.append((nx, ny, visited | {(nx, ny)},
dir_score + str(i), cnt + len(tmp[nx][ny])))
q.sort(key=lambda x: (x[4], -int(x[3])))
x, y, visited, dir_score, cnt = q[-1]
for i, j in visited:
if tmp[i][j]:
tmp[i][j].clear()
smell[i][j] = 3
return (x, y)
m, s = map(int, input().split())
fishes = [tuple(map(lambda x: int(x) - 1, input().split())) for _ in range(m)]
# 1๋ถํฐ ์์๋๋ก ←, โ, ↑, โ, →, โ, ↓, โ
delta = [(0, -1), (-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1)]
s_delta = [0, (-1, 0), (0, -1), (1, 0), (0, 1)]
matrix = [[[] for _ in range(4)] for _ in range(4)]
for x, y, d in fishes:
matrix[x][y].append(d)
shark = tuple(map(lambda x: int(x) - 1, input().split()))
smell = [[0] * 4 for _ in range(4)]
for _ in range(s):
# ๋ฌผ๊ณ ๊ธฐ ๋ณต์
tmp = [[k[:] for k in row] for row in matrix]
# ๋ฌผ๊ณ ๊ธฐ ํ์นธ ์ด๋
# ์ด๋ ํ ๋๊น์ง delta -1
# ๋ฌผ๊ณ ๊ธฐ ๋์ ์๊ฑฐ๋ ์์ด ์๊ฑฐ๋, ๊ฒฉ์ ํ ๋์ด๊ฐ๋ฉด ์ด๋ ๋ถ๊ฐ
tmp = move_fish(tmp)
# ์์ด ์ฐ์ 3์นธ ์ด๋
# ์ํ์ข์ฐ ์ธ์ ํ ์นธ ์ด๋ ๊ฐ๋ฅ
# ๋ฒ์ ๋ฒ์ด๋๋ฉด ๋ถ๊ฐ๋ฅ
shark = move_shark(shark)
# ์ด๋ ์ค ๋ฌผ๊ณ ๊ธฐ ์๋ ๊ณณ์ผ๋ก ๊ฐ๋ฉด ๋ฌผ๊ณ ๊ธฐ ์์ด์ง -> ๋์ ๋จ๊น
# ๋ง์ด ๋จน์ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ
# ์ 1, ์ข 2, ์๋ 3, ์ค๋ฅธ 4 ์์ผ๋ก ์ด๋
for i in range(4):
for j in range(4):
if smell[i][j]:
smell[i][j] -= 1
# ๋ฌผ๊ณ ๊ธฐ ๋ฐฐ์ด tmp fishes ์ ๋ํด์ค
for i in range(4):
for j in range(4):
matrix[i][j] += tmp[i][j]
answer = 0
for i in range(4):
for j in range(4):
answer += len(matrix[i][j])
print(answer)
์์ ์ ๋ ฅ
5 1
4 3 5
1 3 5
2 4 2
2 1 6
3 4 4
4 2
์์ ์ถ๋ ฅ
9
728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON python] 20055_์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด (0) | 2023.04.08 |
---|---|
[BAEKJOON python] 19238_์คํํธ ํ์ (0) | 2023.04.08 |
[BAEKJOON python] 21611_๋ง๋ฒ์ฌ ์์ด์ ๋ธ๋ฆฌ์๋ (0) | 2023.04.07 |
[BAEKJOON python] 21610_๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (0) | 2023.04.07 |
[BAEKJOON python] 20058_๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด์คํฐ (0) | 2023.04.07 |
Comments