[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค-Lv3] ๋“ฑ๊ตฃ๊ธธ / Python

๐Ÿ“š Problem Solving/Programmers

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋“ฑ๊ตฃ๊ธธ

๊ณ„์†๋˜๋Š” ํญ์šฐ๋กœ ์ผ๋ถ€ ์ง€์—ญ์ด ๋ฌผ์— ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š์€ ์ง€์—ญ์„ ํ†ตํ•ด ํ•™๊ต๋ฅผ ๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง‘์—์„œ ํ•™๊ต๊นŒ์ง€ ๊ฐ€๋Š” ๊ธธ์€ m x n ํฌ๊ธฐ์˜ ๊ฒฉ์ž๋ชจ์–‘์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ m =

programmers.co.kr

import sys

input = sys.stdin.readline

m, n = map(int, input().split())
puddles = [list(map(int, input().split())) for _ in range(int(input()))]


def solution(m, n, puddles):
    d = [[0] * (m + 1) for _ in range(n + 1)]
    d[1][1] = 1

    for i in range(1, n + 1):
        for j in range(1, m + 1):
            if i == 1 and j == 1:
                continue
            if [j, i] in puddles:
                continue
            d[i][j] = d[i - 1][j] + d[i][j - 1]

    return d[-1][-1] % 1000000007


print(solution(m, n, puddles))

 

ํ•ด์„ค

dp๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ขŒํ‘œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ ์ขŒํ‘œ์™€๋Š” ๋ฐ˜๋Œ€๋ผ๋Š” ๊ฑธ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

d ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ m+1 by n+1๋กœ, ๋ชจ๋“  ๊ฐ’์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , (1, 1)์€ 1๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ค€๋‹ค.

 

ํ˜„์žฌ ์ขŒํ‘œ์—์„œ ์œ„์™€ ์™ผ์ชฝ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ•ฉํ•œ ๊ฐ’์ด ํ˜„์žฌ ์ขŒํ‘œ๊นŒ์ง€ ์˜ค๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋œ๋‹ค.

์ขŒํ‘œ๊ฐ€ ๋ฐ˜๋Œ€์ด๊ธฐ ๋•Œ๋ฌธ์— [j, i]๊ฐ€ ์šฐ๋ฌผ์ด ์žˆ๋Š” ์ขŒํ‘œ๋ผ๋ฉด ๊ทธ๋Œ€๋กœ 0์œผ๋กœ ๋†”๋‘”๋‹ค.