ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

 

2178번: 미둜 탐색

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

www.acmicpc.net

 

문제 풀이

 μ‹œμž‘ 지점(0, 0)μ—μ„œ 도착 μœ„μΉ˜μ— κ°ˆλ•ŒκΉŒμ§€ λͺ‡μΉΈμ„ 이동해야 ν•˜λŠ”μ§€ μ°ΎλŠ” λ¬Έμ œμ΄λ‹€. μ‹œμž‘ 지점 λΆ€ν„° 상, ν•˜, 쒌, 우둜 νƒμƒ‰ν•˜λ©΄μ„œ μΈμ ‘ν•œ μΉΈ 쀑에 λ°©λ¬Έ κ°€λŠ₯ν•œ 칸이 μžˆλŠ”μ§€ 확인 후에, 값을 μ€‘μ²©μ‹œν‚€λ©° 도착 μœ„μΉ˜μ— 이λ₯΄λ €μ„ λ•Œ λͺ‡μΉΈμ„ μ΄λ™ν–ˆλŠ”μ§€ 좜λ ₯ν•˜λ©΄ λœλ‹€.

 μœ„μœΌ κ·Έλ¦Όκ³Ό 같이 예제 μž…λ ₯1, 2λ₯Ό νƒμƒ‰ν•˜κ²Œ 되면 도착 지점에 이λ₯΄κΈ°κΉŒμ§€ 값을 μ€‘μ²©ν•˜λ©΄ 닡을 ꡬ할 수 μžˆλŠ” 것을 μ•Œ 수 μžˆλ‹€. μ²˜μŒμ—λŠ” λ°±νŠΈλž™ν‚Ήμ΄ ν•„μš”ν•˜μ§€ μ•Šμ„κΉŒ μƒκ°ν–ˆλŠ”λ° 그럴 ν•„μš” 없이 값을 λˆ„μ ν•˜λ©° 탐색을 μ§„ν–‰ν•˜λ©΄ λœλ‹€.

 

μ½”λ“œ

from sys import stdin
from collections import deque


def visitable(x, y):
    return 0 <= x < n and 0 <= y < m 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 = x + cur_x, y + cur_y
            if visitable(next_x, next_y):
                q.append([next_x, next_y])
                graph[next_x][next_y] += graph[cur_x][cur_y]

    return graph[n - 1][m - 1]


if __name__ == "__main__":
    n, m = map(int, stdin.readline().split())
    graph = [list(map(int, stdin.readline().rstrip())) for _ in range(n)]
    dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
    print(bfs([0, 0]))
728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€