ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์ฃผ์ด์ง ๋ฏธ๋ก์๋ 2๊ฐ์ง์ ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌํ๋ค. ์ฒซ ๋ฒ์งธ๋ ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ์ด๊ณ , ๋ ๋ฒ์งธ๋ ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ์ด๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ฒฝ์ ์ต์ํ์ผ๋ก ๋ถ์๊ณ , [N, M]์ ๋์ฐฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐํํ์ฌ์ผ ํ๋ค. ๋ง์ฝ 2๊ฐ์ ๊ฐ์ค์น๊ฐ ์๋ ์ฌ๋ฌ ๊ฐ์ค์น๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด, ๋ค์ต์คํธ๋ผ๋ก ํ์ด์ผ ํ๋ค. ํ์ง๋ง ๋ฌธ์ ์์๋ ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ์ ๋ํ ์ฐ์ ์์๋ฅผ ์ฃผ๋ฉด ๋๋ฏ๋ก ์ด์ ์ ํผ ์จ๋ฐ๊ผญ์ง 3๊ณผ ๊ฐ์ด BFS๋ฅผ ํตํด์๋ ํ ์ ์๋ค.
์๋์ ๊ฒฝ์ฐ์ ์๋ฅผ ํ๋จํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
- ์, ํ, ์ข, ์ฐ๋ก ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ค.
- ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๊ฒฝ๋ก ์ค ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ (0)์ด๋ฉด `appendleft`๋ก ํ์ ์ถ๊ฐํ๋ค.
- ์ด์ ๋ฐ๋๋ก ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ๋ฉด `append`๋ก ํ์ ์ถ๊ฐํ๋ค.
- `deque`์์ ๊ฐ์ ๊บผ๋ผ ๋ `popleft`๋ฅผ ํตํด ๊บผ๋ด๊ฒ ๋๋ฏ๋ก `appendleft`๋ก ์ฐ์ ์์๋ฅผ ์ค ์ ์๋ค.
- `visited`๋ฅผ ๋จ์ํ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ์ง ์๊ณ , ๋ฒฝ์ด ์๋ค๋ฉด ์ด์ ์ ๋ถ์ ๋ฒฝ์ ์์ + 1์ ํด์ค๋ค.
- ์ด์ ๋ฐ๋๋ก ๋ฒฝ์ด ์๋ค๋ฉด, ์ด์ ์ ๋ถ์ ๋ฒฝ์ ์๋ง ๋ฐ์ํ๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y):
return 0 <= x < m and 0 <= y < n and graph[x][y] > -1
def bfs(start):
q = deque([start])
while q:
cur_x, cur_y = q.popleft()
for x, y in dirs:
next_x, next_y = cur_x + x, cur_y + y
if visitable(next_x, next_y):
visited[next_x][next_y] = visited[cur_x][cur_y]
if not graph[next_x][next_y]:
q.appendleft([next_x, next_y])
else:
visited[next_x][next_y] += 1
q.append([next_x, next_y])
graph[next_x][next_y] = -1
return visited[m - 1][n - 1]
if __name__ == '__main__':
n, m = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().rstrip())) for _ in range(m)]
visited = [[0] * n for _ in range(m)]
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
graph[0][0] = -1
print(bfs([0, 0]))
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 14225 ๋ถ๋ถ์์ด์ ํฉ (0) | 2020.07.31 |
---|---|
๋ฐฑ์ค: 2250 ํธ๋ฆฌ์ ๋์ด์ ๋๋น (0) | 2020.07.29 |
๋ฐฑ์ค: 11725 ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ (0) | 2020.07.27 |
๋ฐฑ์ค: 1991 ํธ๋ฆฌ ์ํ (0) | 2020.07.27 |
๋ฐฑ์ค: 14226 ์ด๋ชจํฐ์ฝ (0) | 2020.07.25 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ