ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์๊ธฐ ์์ด๊ฐ NxN ํฌ๊ธฐ์ ๊ณต๊ฐ์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฉด์ ์ด๋ ํ ๋, ์ต๋จ ์๊ฐ์ ๋ฐํํ์ฌ์ผ ํ๋ค. ๋ฌธ์ ์์๋ ์๊ธฐ ์์ด๊ฐ ์์ง์ด๊ธฐ ์ํ ์กฐ๊ฑด๋ค์ด ์กด์ฌํ๋ค.
- ์๊ธฐ ์์ด๋ ์์ ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ํฌ๊ธฐ์ ๋ฌผ๊ณ ๊ธฐ๋ ๋จน์ ์ ์๋ค.
- ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ ๋ฌผ๊ณ ๊ธฐ ๋ถํฐ ์ฐ์ ์ ์ผ๋ก ๋จน์ด์ผ ํ๋ค.
- ์ฌ๋ฌ ๋ง๋ฆฌ๋ฅผ ๋จน์ ์ ์๋ค๋ฉด, ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฐ์ ์์๋ก ๋จน์ด์ผ ํ๋ค.
๋ฌธ์ ๋ฅผ ์ฒ์์๋ `BFS`์ `sort`๋ฅผ ํตํด ํ ์์ง๋ง, `heapq`๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ ๋์ฑ ๊น๋ํ๊ณ ์ฝ๋๊ฐ ์ง๊ด์ ์ด๋ค. `heapq`๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ ์์๋ฅผ `(์๊ฐ, x, y)`๋ก ํ์ฌ ํ์์ ์งํํ๋ค. ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ ์ด์ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์ข ๋ฃํ๋ฉด ๋ฌธ์ ์์ ์ํ๋ ๋ต์ ์ฐพ์ ์ ์๋ค.
์ฝ๋
from sys import stdin
from heapq import heappush, heappop
def visitable(x, y, size, visited):
return 0 <= x < n and 0 <= y < n and graph[x][y] <= size and not visited[x][y]
def bfs(time, shark):
size, eat, answer = 2, 0, 0
heap = []
heappush(heap, (time, shark[X], shark[Y]))
visited = [[False] * n for _ in range(n)]
while heap:
time, x, y = heappop(heap)
# ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ผ๋ฉด
if 0 < graph[x][y] < size:
eat += 1
graph[x][y] = 0
# ํฌ๊ธฐ๊ฐ 2๋ผ๋ฉด 2๋ง๋ฆฌ๋ฅผ ๋จน์ด์ผ ํจ.
if eat == size:
size += 1
eat = 0
answer += time
time = 0
# heap, ๋ฐฉ๋ฌธ ์ฌ๋ถ ์ด๊ธฐํ
heap = []
visited = [[False] * n for _ in range(n)]
for dx, dy in dirs:
next_x, next_y = x + dx, y + dy
if visitable(next_x, next_y, size, visited):
visited[next_x][next_y] = True
heappush(heap, (time + 1, next_x, next_y))
return answer
if __name__ == '__main__':
X, Y = 0, 1
n = int(stdin.readline())
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
dirs = ((0, 1), (1, 0), (0, -1), (-1, 0))
for i in range(n):
for j in range(n):
if graph[i][j] == 9:
graph[i][j] = 0
print(bfs(0, [i, j]))
break
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 16235 ๋๋ฌด ์ฌํ ํฌ (0) | 2020.10.14 |
---|---|
๋ฐฑ์ค: 19236 ์ฒญ์๋ ์์ด (0) | 2020.10.13 |
๋ฐฑ์ค: 17089 ์ธ ์น๊ตฌ (0) | 2020.10.10 |
๋ฐฑ์ค: 16943 ์ซ์ ์ฌ๋ฐฐ์น (2) | 2020.10.10 |
๋ฐฑ์ค: 2133 ํ์ผ ์ฑ์ฐ๊ธฐ (0) | 2020.10.09 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ