๐ ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ
๐ ๋ฌธ์
https://www.acmicpc.net/problem/2178
2178๋ฒ: ๋ฏธ๋ก ํ์
์ฒซ์งธ ์ค์ ๋ ์ ์ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ M๊ฐ์ ์ ์๋ก ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ ์๋ค์ ๋ถ์ด์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
www.acmicpc.net
โ ํ์ด๊ณผ์
์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ฏ๋ก bfs๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ
'1743๋ฒ: ์์๋ฌผ ์ฐ๋ ๊ธฐ' ๋ฌธ์ ๋ฅผ ๋จผ์ ํ์๋๋ฐ ๋ค์ ๋์์์ ๋ฌธ์ ๋ฅผ ๋ณด๋ ๋น์ทํ๊ฒ ํ๋ฉด ๋๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
import sys
from collections import deque
n, m = map(int, input().split())
board=[]
visited =[[0]*m for _ in range(n)]
for _ in range(n):
board.append(list(input()))
dx=[-1, 1 ,0 ,0]
dy=[0,0,-1,1]
# ์์์
queue = deque()
visited[0][0] = 1
queue.append((0, 0))
while queue:
cur_x, cur_y = queue.popleft()
if cur_x == n-1 and cur_y == m-1:
print(visited[cur_x][cur_y])
break
for i in range(4):
X = cur_x + dx[i]
Y = cur_y + dy[i]
if 0 <= X < n and 0 <= Y < m and visited[X][Y] == 0 and board[X][Y] == '1':
queue.append((X, Y))
visited[X][Y] = visited[cur_x][cur_y] + 1
1743๋ฒ๊ณผ ๋ค๋ฅด๊ฒ visited ๋ฆฌ์คํธ์ ์ง๋์จ ์นธ ์๋ฅผ ์ ์ฅํ์๋ค.
Deque ์ด๊ธฐํ Error
# ์ค๋ฅ 1
queue = deque((0, 0))
visited[0][0] = 1
# ์ค๋ฅ 2
queue = deque([0, 0])
## deque([0, 0])
# ์ฌ๋ฐ๋ฅธ ์ฝ๋ 1
queue = deque()
visited[0][0] = 1
queue.append((0, 0))
# ์ฌ๋ฐ๋ฅธ ์ฝ๋ 2
queue = deque([(0, 0)])
## deque([(0, 0)])
while queue:
cur_x, cur_y = queue.popleft()
if cur_x == n-1 and cur_y == m-1:
print(visited[cur_x][cur_y])
break
TypeError: 'int' object is not iterable
์์์ ์ deque์ ๋ฃ๋ ์ฝ๋๋ฅผ (์ค๋ฅ 1), (์ค๋ฅ 2) ์ฒ๋ผ ์์ฑํ๋๋ TypeError๊ฐ ๋ฐ์ํ์๋ค.
deque ๋ด์ tuple์ด๋ list๋ก ์ด๊ธฐํ๋ฅผ ํ๊ฒ ๋๋ฉด deque([0, 0]) ์ฒ๋ผ ํ๋์ ๋ฆฌ์คํธ๊ฐ ์์ฑ๋๋ฏ๋ก
while ๋ฌธ ๋ด์์ cur_x๋ 0์ ํ ๋น๋ฐ๊ณ , cur_y๋ ํ ๋น๋ฐ๋ ๊ฒ์ด ์์ด์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
popleft๋ก x, y๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด,
1) append ์ฌ์ฉ
2) [( )] ์ฌ์ฉ
https://trey-de.tistory.com/14
Python์์ deque.popleft() ์คํ ์, iterable error๊ฐ ๋ฌ๋ค๋ฉด?
BFS๋ฌธ์ ๋ค์ ํ๋ค๋ณด๋ฉด, x์ y์ขํ๋ฅผ ํ์ ๋ฃ๊ณ ๋นผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. (์: www.acmicpc.net/problem/1926) ๋ฌผ๋ก ์ํฉ์ ๋ง๊ฒ ์ ์ฉํ๋ฉด ๋๊ฒ ์ง๋ง, 1) ํ๋ฅผ ์์ฑํ ํ์ ๋ฆฌ์คํธ ๋๋ ํํ ์๋ฃํ์ผ๋ก ํ์
trey-de.tistory.com