πŸ“š Study/Baekjoon

[Silver I] 2178 - λ―Έλ‘œνƒμƒ‰

윰갱 2025. 4. 9. 21:52

문제

N×M크기의 λ°°μ—΄λ‘œ ν‘œν˜„λ˜λŠ” λ―Έλ‘œκ°€ μžˆλ‹€.

1 0 1 1 1 1
1 0 1 0 1 0
1 0 1 0 1 1
1 1 1 0 1 1

λ―Έλ‘œμ—μ„œ 1은 이동할 수 μžˆλŠ” 칸을 λ‚˜νƒ€λ‚΄κ³ , 0은 이동할 수 μ—†λŠ” 칸을 λ‚˜νƒ€λ‚Έλ‹€. μ΄λŸ¬ν•œ λ―Έλ‘œκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, (1, 1)μ—μ„œ μΆœλ°œν•˜μ—¬ (N, M)의 μœ„μΉ˜λ‘œ 이동할 λ•Œ μ§€λ‚˜μ•Ό ν•˜λŠ” μ΅œμ†Œμ˜ μΉΈ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. ν•œ μΉΈμ—μ„œ λ‹€λ₯Έ 칸으둜 이동할 λ•Œ, μ„œλ‘œ μΈμ ‘ν•œ 칸으둜만 이동할 수 μžˆλ‹€.

μœ„μ˜ μ˜ˆμ—μ„œλŠ” 15칸을 μ§€λ‚˜μ•Ό (N, M)의 μœ„μΉ˜λ‘œ 이동할 수 μžˆλ‹€. 칸을 μ…€ λ•Œμ—λŠ” μ‹œμž‘ μœ„μΉ˜μ™€ 도착 μœ„μΉ˜λ„ ν¬ν•¨ν•œλ‹€.

μž…λ ₯

첫째 쀄에 두 μ •μˆ˜ N, M(2 ≤ N, M ≤ 100)이 μ£Όμ–΄μ§„λ‹€. λ‹€μŒ N개의 μ€„μ—λŠ” M개의 μ •μˆ˜λ‘œ λ―Έλ‘œκ°€ μ£Όμ–΄μ§„λ‹€. 각각의 μˆ˜λ“€μ€ λΆ™μ–΄μ„œ μž…λ ₯으둜 μ£Όμ–΄μ§„λ‹€.

좜λ ₯

첫째 쀄에 μ§€λ‚˜μ•Ό ν•˜λŠ” μ΅œμ†Œμ˜ μΉΈ 수λ₯Ό 좜λ ₯ν•œλ‹€. 항상 λ„μ°©μœ„μΉ˜λ‘œ 이동할 수 μžˆλŠ” 경우만 μž…λ ₯으둜 μ£Όμ–΄μ§„λ‹€.

예제 μž…λ ₯ 1 

4 6
101111
101010
101011
111011

예제 좜λ ₯ 1 

15

예제 μž…λ ₯ 2 

4 6
110110
110110
111111
111101

예제 좜λ ₯ 2 

9

예제 μž…λ ₯ 3 

2 25
1011101110111011101110111
1110111011101110111011101

예제 좜λ ₯ 3 

38

예제 μž…λ ₯ 4 

7 7
1011111
1110001
1000001
1000001
1000001
1000001
1111111

예제 좜λ ₯ 4 

13

# 풀이 방법

이취코 κ΅μž¬μ—μ„œ ν’€μ—ˆλ˜ 문제

* μ΅œμ†Œμ˜ μΉΈ 수 * > bfs

μ§€λ‚˜μ˜¨ 길듀을 +1μ”© updateν•˜λ©΄ μƒˆλ‘œμš΄ λ³€μˆ˜λ₯Ό λ§Œλ“€μ§€ μ•Šκ³ λ„ ν•œλ²ˆμ— λͺ‡ 칸이 ν•„μš”ν•œμ§€ μ•Œ 수 μžˆλ‹€.

 

# μ½”λ“œ

import sys
from collections import deque
sys.stdin = open("input.txt", "r")

n, m = map(int, sys.stdin.readline().split())
graph = [list(map(int, sys.stdin.readline().strip())) for _ in range(n)]

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def bfs(x,y):
    queue = deque()
    queue.append((x,y))

    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]

            if nx <= -1 or nx >= n or ny <= -1 or ny >= m:
                continue
            if graph[nx][ny] == 0:
                continue
            if graph[nx][ny] == 1:
                graph[nx][ny] = graph[x][y] + 1
                queue.append((nx,ny))
    return graph[n-1][m-1]

print(bfs(0,0))