https://www.acmicpc.net/problem/2206
2206๋ฒ: ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ
NรM์ ํ๋ ฌ๋ก ํํ๋๋ ๋งต์ด ์๋ค. ๋งต์์ 0์ ์ด๋ํ ์ ์๋ ๊ณณ์ ๋ํ๋ด๊ณ , 1์ ์ด๋ํ ์ ์๋ ๋ฒฝ์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค. ๋น์ ์ (1, 1)์์ (N, M)์ ์์น๊น์ง ์ด๋ํ๋ ค ํ๋๋ฐ, ์ด๋ ์ต๋จ ๊ฒฝ๋ก
www.acmicpc.net
from collections import deque
n, m = map(int, input().split())
list = [[] for _ in range(n)]
for i in range(n):
data = input()
for j in range(m):
list[i].append(int(data[j]))
def bfs(x, y, z):
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
queue = deque()
queue.append([x, y, z])
visited = [[[0] * 2 for _ in range(m)] for _ in range(n)]
visited[x][y][z] = 1
while queue:
qx, qy, qz = queue.popleft()
if qx == n-1 and qy == m-1:
return visited[qx][qy][qz]
for i in range(4):
mx = qx + dx[i]
my = qy + dy[i]
if mx < 0 or mx >= n or my < 0 or my >= m:
continue
if list[mx][my] == 1 and qz == 1:
visited[mx][my][0] = visited[qx][qy][1] + 1
queue.append([mx, my, 0])
elif list[mx][my] == 0 and visited[mx][my][qz] == 0:
visited[mx][my][qz] = visited[qx][qy][qz] + 1
queue.append([mx, my, qz])
return -1
print(bfs(0, 0, 1))
์ฒ์์ flag ๋ณ์๋ฅผ ํ๋ ๋ฌ์ ๋ฒฝ์ ๋ซ์ผ๋ฉด flag ๊ฐ์ ๋ณํ๊ฒ ํด์ ๋์ด์ ๋ฒฝ์ ๋ชป ๋ซ๊ฒ ํ๋ค
๊ทผ๋ฐ ๋จ์ํ ๊ทธ๋ ๊ฒ ํ๋ฉด ๊ธธ์ด ์๋ ๋ฐฉํฅ์ผ๋ก ๋ฒฝ์ ๋ซ์์ ๋ ๋ต์ ๋ชป ์ฐพ๊ฒ ๋จ
๊ทธ๋์ ๊ณ ๋ฏผ์ ํด๋ณด๋ค๊ฐ ์ง์ง ๋์ ~~~~ํ ๋ชจ๋ฅด๊ฒ ์ด์ ๊ตฌ๊ธ๋งํจ.....
3์ฐจ์ ๋ฐฐ์ด์ ์จ์ผ ํ๋ค๊ธธ๋ ๋ ์ด์ฌํ ๋จธ๋ฆฌ๋ฅผ ์ฅ๋ฏ์๋ค
์ ์ ์ด๋ ๊ฒ ๋ฉ์ฒญํ๊ฑฐ์ฃ ? ์๊ณ ๋ฆฌ์ฆ์ด ์ดํด๊ฐ ์ ๊ฐ์,,,,,,,,,,
visited ๋ฐฐ์ด์ 3์ฐจ์์ผ๋ก ๋๊ณ x, y๋ ๊ฐ ๋งต์ ์ขํ์ด๊ณ
์ฌ๊ธฐ์ z๊ฐ 1์ด๋ฉด ๋ฒฝ์ ๋ซ์ ์ ์๋ ์ํ์ด๊ณ 0์ด๋ฉด ๋ฒฝ์ ์ด๋ฏธ ํ๋ฒ ๋ซ์๊ธฐ ๋๋ฌธ์ ๋ซ์ ์ ์๋ ์ํ์ด๋ค. (flag ์ญํ ์ ํจ)
bfs ๋๋ฆฌ๋ฉด์ ๋ฒฝ์ ๋ง๋ฌ๊ณ , ๋ฒฝ์ ๋ซ์ ์ ์๋ ์ํ์ด๋ฉด ๋ซ์ ๊ทธ๋ฆฌ๊ณ visited + 1
๊ธธ์ด ์๊ณ (๋ฒฝ ์๋), ์์ง ๋ฐฉ๋ฌธํ ์ ์ด ์๋ ๊ธธ์ด๋ฉด visited + 1
๊ฒจ์ฐ๊ฒจ์ฐ ์ดํดํ์ง๋ง ์์ง ํท๊ฐ๋ฆฐ๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ข๋ ๋ฏ์ด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค

'๐ค > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1707: ์ด๋ถ๊ทธ๋ํ (Python) (0) | 2022.02.03 |
---|---|
๋ฐฑ์ค 7564: ๋์ดํธ์ ์ด๋ (Python) (0) | 2022.02.03 |
๋ฐฑ์ค 1697: ์จ๋ฐ๊ผญ์ง (Python) (2) | 2022.02.02 |
๋ฐฑ์ค 7569: ํ ๋งํ (Python) (0) | 2022.02.02 |
๋ฐฑ์ค 7576: ํ ๋งํ (Python) (0) | 2022.02.02 |