๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Python] ๋ฐฑ์ค€ 2206 & ๋ฐฑ์ค€ 1697 ๋ณธ๋ฌธ

# ๋ฐฑ์ค€ 2206

from collections import deque
n, m = map(int, input().split(' '))

graph = []
for _ in range(n):
    graph.append(list(map(int, input())))

visited = [[[0] * 2 for _ in range(m)] for _ in range(n)]
d_row = [0, -1, 0, +1]
d_col = [+1, 0, -1, 0]
def bfs():
    queue = deque()
    queue.append([0,0,0])
    visited[0][0][0] = 1
 # w = 0์ด๋ฉด ๋ฒฝ์„ ๋šซ์ง€ ์•Š๊ณ  ๊ฐ„ ๊ฒฝ์šฐ, w = 1์ด๋ฉด ๋ฒฝ์„ ๋šซ๊ณ  ๊ฐ„ ๊ฒฝ์šฐ
    while queue:
        x,y,w = queue.popleft()
        if x == n-1 and y == m-1:
            return visited[x][y][w]
        for i in range(4):
            nx, ny = x+d_row[i], y+d_col[i]
            if nx < 0 or ny< 0 or nx> n-1 or ny > m-1:
                continue
            # ๋‹ค์Œ ์œ„์น˜๊ฐ€ 0์ด๊ณ  , ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด(๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด 1)
            if graph[nx][ny] == 0 and visited[nx][ny][w] == 0:
                visited[nx][ny][w] = visited[x][y][w] + 1
                queue.append([nx,ny,w])
            # ๋‹ค์Œ ์œ„์น˜๊ฐ€ ๋ฒฝ์ด๊ณ , ๋ฒฝ์„ ์•„์ง ๋ถ€์ˆ˜์ง€ ์•Š์•˜๋‹ค๋ฉด(w == 0)
            elif graph[nx][ny] == 1 and w == 0:
                visited[nx][ny][w+1] = visited[x][y][w] + 1 # visited +1์€ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•œ๊ฑฐ, w+1 ์€ ๋ฒฝ์„ ๋ถ€์…จ๋‹ค๋Š” ์˜๋ฏธ
                queue.append([nx,ny,w+1])
    return -1

print(bfs())

 

 

 

# ๋ฐฑ์ค€ 1697
import sys
from collections import deque

def bfs():
    q = deque()
    q.append(n)
    while q:
        x = q.popleft()
        if x == k:
            return visited[x]
        for nx in (x * 2, x + 1, x - 1):
            if 0 <= nx <= 100001 and not visited[nx]:
                visited[nx] = visited[x] + 1
                q.append(nx)

n, k = map(int, sys.stdin.readline().split())
visited = [0 for i in range(100001)]
print(bfs())

๐Ÿ“ Points

3์ฐจ์› vistied ๊ทธ๋ž˜ํ”„ ์‚ฌ์šฉํ•˜์ž