2021. 2. 1. 18:23ใ๐ Algorithm/๐ช๐ป Python ๋ฌธ์ ํ์ด
๋ฌธ์ ์ค๋ช
๊ณ์๋๋ ํญ์ฐ๋ก ์ผ๋ถ ์ง์ญ์ด ๋ฌผ์ ์ ๊ฒผ์ต๋๋ค. ๋ฌผ์ ์ ๊ธฐ์ง ์์ ์ง์ญ์ ํตํด ํ๊ต๋ฅผ ๊ฐ๋ ค๊ณ ํฉ๋๋ค. ์ง์์ ํ๊ต๊น์ง ๊ฐ๋ ๊ธธ์ m x n ํฌ๊ธฐ์ ๊ฒฉ์๋ชจ์์ผ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
์๋ ๊ทธ๋ฆผ์ m = 4, n = 3 ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
๊ฐ์ฅ ์ผ์ชฝ ์, ์ฆ ์ง์ด ์๋ ๊ณณ์ ์ขํ๋ (1, 1)๋ก ๋ํ๋ด๊ณ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋, ์ฆ ํ๊ต๊ฐ ์๋ ๊ณณ์ ์ขํ๋ (m, n)์ผ๋ก ๋ํ๋ ๋๋ค.
๊ฒฉ์์ ํฌ๊ธฐ m, n๊ณผ ๋ฌผ์ด ์ ๊ธด ์ง์ญ์ ์ขํ๋ฅผ ๋ด์ 2์ฐจ์ ๋ฐฐ์ด puddles์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ค๋ฅธ์ชฝ๊ณผ ์๋์ชฝ์ผ๋ก๋ง ์์ง์ฌ ์ง์์ ํ๊ต๊น์ง ๊ฐ ์ ์๋ ์ต๋จ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ 1,000,000,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- ๊ฒฉ์์ ํฌ๊ธฐ m, n์ 1 ์ด์ 100 ์ดํ์ธ ์์ฐ์์
๋๋ค.
- m๊ณผ n์ด ๋ชจ๋ 1์ธ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ๋ฌผ์ ์ ๊ธด ์ง์ญ์ 0๊ฐ ์ด์ 10๊ฐ ์ดํ์ ๋๋ค.
- ์ง๊ณผ ํ๊ต๊ฐ ๋ฌผ์ ์ ๊ธด ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์์
ํ์ด ๊ณผ์
์ ํ์ ์ธ DP ๋ฌธ์ ์ธ๋ฐ ์ค,๊ณ ๋ฑํ๊ต์์ ํ๋ฅ , ๊ฒฝ์ฐ์์ ๋ฌธ์ ์์ ๋ง์ด ๋ณธ ๋ฌธ์ ์๋ค.
๊ฐ์์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ ๋ํด๊ฐ์ผํ๊ธฐ ๋๋ฌธ์ load ๋ฐฐ์ด์ ๋ง๋ค์ด ์ฃผ์๋ค ์ด๋, ๋ฑ๊ตฃ๊ธธ ๋ฌธ์ ๋ 1,1 ๋ถํฐ ์์ํ๋ฏ๋ก m+1, n+1 ํฌ๊ธฐ์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ฃผ์๋ค.
๊ทธ ๋ค์ ์ด์ค for๋ฌธ์ ๋๋ ค 1,1๋ถํฐ ์์ํ๊ฒ ๋ง๋ค์ด ์ฃผ์๋๋ฐ 1,1์ ์ง์ด ์๋ ์์ ์นธ ์ด๋ฏ๋ก 1๋ก load[1][1] = 1๋ก ๋ง๋ค์ด ์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ puddles์ ์กด์ฌํ์ง ์๋ ๊ณต๊ฐ(์ฅ์ ๋ฌผ์ด ์๋ ๊ณต๊ฐ)์์๋ง load[i][j] = load[i - 1][j] + load[i][j - 1] ๊ท์น์ ์ด์ฉํ์ฌ ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์์๋ฅผ ๋ํด์ฃผ์๋ค.
def solution(m, n, puddles):
set_puddles = set()
for puddle in puddles:
set_puddles.add(tuple(puddle))
load = [[0 for _ in range(n + 1)] for _ in range(m + 1)]
for i in range(1, m + 1):
for j in range(1, n + 1):
if i == 1 and j == 1:
load[i][j] = 1
elif (i, j) not in set_puddles:
load[i][j] = load[i - 1][j] + load[i][j - 1]
return load[m][n] % 1_000_000_007
if __name__ == "__main__":
print(solution(4, 3, [[2, 2]]))
'๐ Algorithm > ๐ช๐ป Python ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python - ํ๋ก๊ทธ๋๋จธ์ค Level2] ์ต์๊ฐ ๋ง๋ค๊ธฐ (0) | 2021.02.01 |
---|---|
[Python - ํ๋ก๊ทธ๋๋จธ์ค Level3] ์ ์ ์ผ๊ฐํ (0) | 2021.02.01 |
[Python - ํ๋ก๊ทธ๋๋จธ์ค Level3] 2*n ํ์ผ๋ง (0) | 2021.02.01 |