ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

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
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€