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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

1890๋ฒˆ: ์ ํ”„

๋ฌธ์ œ N×N ๊ฒŒ์ž„ํŒ์— ์ˆ˜๊ฐ€ ์ ํ˜€์ ธ ์žˆ๋‹ค. ์ด ๊ฒŒ์ž„์˜ ๋ชฉํ‘œ๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์นธ์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์œผ๋กœ ๊ทœ์น™์— ๋งž๊ฒŒ ์ ํ”„๋ฅผ ํ•ด์„œ ๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” ํ˜„์žฌ ์นธ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๏ฟฝ๏ฟฝ

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 N X N ๊ฒŒ์ž„ํŒ์ด ์ฃผ์–ด์งˆ ๋•Œ, ํ˜„์žฌ ๊ฒฝ๋กœ์—์„œ (0, 1), (1, 0)์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒŒ์ž„ํŒ์— ์ฃผ์–ด์ง„ ์ˆซ์ž๋งŒํผ ์ ํ”„ํ•˜์—ฌ ์ด๋™ํ•˜๋Š” ๊ทœ์น™์ด ์ ์šฉ๋  ๋•Œ, (N, N)์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋‹จ์ˆœํžˆ ๋ณด๋ฉด DFS๋‚˜, BFS๋กœ ํ’€๋ฉด ๋˜๊ฒ ์ง€๋ผ๊ณ  ์ƒ๊ฐ๋˜์ง€๋งŒ N์ด ์ตœ๋Œ€ 100๊นŒ์ง€ ์ปค์ง€๋ฏ€๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ ๋ถ„๋ฅ˜์™€ ๊ฐ™์ด DP๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค.

 

 ํ˜„์žฌ ์œ„์น˜์˜ ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ x, y์ถ•์— ๊ฐ๊ฐ ๋”ํ•˜์—ฌ, N ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์ด๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ํ˜„์žฌ ์œ„์น˜์˜ ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ 0 (๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ) ์ผ ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๋ฉฐ, ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ค‘์ฒฉํ•œ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


if __name__ == "__main__":
    n = int(stdin.readline())
    graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
    visited = [[0] * n for _ in range(n)]
    visited[0][0] = 1

    for x in range(n):
        for y in range(n):
            jump = graph[x][y]
            if not jump:
                break
            if x + jump < n:
                visited[x + jump][y] += visited[x][y]
            if y + jump < n:
                visited[x][y + jump] += visited[x][y]
                
    print(visited[-1][-1])

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€