๋ฌธ์
๋ฌผ ์ ๋ฉ์ด๊ฐ ์๋ ์นธ๋ง์ผ๋ก ํ๊ต์ ๊ฐ ์ ์๋ ๊ฒฝ๋ก์ ์๋ฅผ ๊ตฌํ๋ผ
์ ๋ ฅ๊ฐ
- m: ๊ฐ๋ก ๊ธธ์ด
- n: ์ธ๋ก ๊ธธ์ด
- puddles: ๋ฌผ์ ์ ์ ์ง์ญ๋ค ์ขํ
์ ํ์ฌํญ
- 1 <= m, n <= 100 (m๊ณผ n์ด ๋ชจ๋ 1์ธ ๊ฒฝ์ฐ๋ ์๋ค)
- 0 <= len(puddles) <= 10
- ํ๊ต์ ์ง์ ๋ฌผ์ ์ ๊ธฐ์ง ์๋๋ค.
- 1000000007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๋ฐํํ๋ผ
๋ฌธ์ ํ์ด
- ๊ฐ์ฅ ์์ ํ์๋ฌธ์ ๋ 3๊ฐ์ง๊ฐ ์๋ค. m๊ณผ n์ด ๊ฐ๊ฐ 2x2, 1x2, 2x1 ์ธ ๊ฒฝ์ฐ.
- 1x2๋ 2x1์ธ ๊ฒฝ์ฐ ๊ฐ๊ฐ ์๋์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ ๋ฌผ์ ๋ฉ์ด๊ฐ ์๋๊ฐ ์๋๊ฐ์ ๋ฐ๋ผ์ ๊ฐ ์ ์๊ณ (๊ฒฝ๋ก ๊ฐฏ์ 1) ์๊ณ (๊ฒฝ๋ก ๊ฐฏ์ 0)๊ฐ ๊ฒฐ์ ๋๋ค.
- 2x2 ์ ๊ฒฝ์ฐ ์๋์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ ๋ชจ๋ ๋ฌผ์ ๋ฉ์ด๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ ์ ์๊ณ (๊ฒฝ๋ก ๊ฐฏ์ 0), ๋ ์ค ํ ๊ตฐ๋ฐ์ ๋ฌผ์ ๋ฉ์ด๊ฐ ์์ผ๋ฉด ๋ค๋ฅธ ํ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์๊ณ (๊ฒฝ๋ก ๊ฐฏ์ 1), ๋ฌผ์ ๋ฉ์ด๊ฐ ๋ ๋ค ์์ผ๋ฉด ๋ ๋ฐฉํฅ ๋ชจ๋ ๊ฐ ์ ์๋ค (๊ฒฝ๋ก ๊ฐฏ์ 2).
- ์ด๋ฅผ ํ์ฅํด์ ์ค๋ฅธ์ชฝ ํ๋จ์ ์์นํ ํ๊ต ๊ทผ์ฒ ๋ธ๋ก๋ค๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณ์ฐํ์ฌ ๋งจ ์ผ์ชฝ ์๋จ์ ์์นํ ์ง๊น์ง ๊ณ์ฐํด ์ฌ๋ผ์ค๋ฉด ๋๋ค.
MAX = 1000000007
def solution(m, n, puddles):
memo = [[1 for __ in range(m)] for _ in range(n)]
for x, y in puddles:
memo[y-1][x-1] = 0
for y in reversed(range(n)):
for x in reversed(range(m)):
if not memo[y][x] or (x == m-1 and y == n-1):
continue
elif x == m - 1:
memo[y][x] = memo[y+1][x]
elif y == n - 1:
memo[y][x] = memo[y][x+1]
else:
memo[y][x] = (memo[y+1][x] + memo[y][x+1]) % MAX
return memo[0][0]
์๊ฐ๋ณต์ก๋: O(M*N + P), M๊ณผ N์ 100์ดํ๋ก ์ ํ๋์ด์๊ณ ๋ฌผ์ ๋ฉ์ด๋ 10์ดํ๋ก ์ ํ๋์ด์์ผ๋ฏ๋ก O(1)
๊ณต๊ฐ๋ณต์ก๋: O(1)