๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šคํ„ฐ๋”” 8์ฃผ์ฐจ] ๋™์ ๊ณ„ํš๋ฒ• ๋“ฑ๊ตฃ๊ธธ Lv.3 - ํŒŒ์ด์ฌ(Python) / DP/ ๋ฉ”๋ชจ์ด์ œ์ด์…˜

๐Ÿ“‘ ๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/42898

 

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

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

programmers.co.kr

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

๊ณ„์†๋˜๋Š” ํญ์šฐ๋กœ ์ผ๋ถ€ ์ง€์—ญ์ด ๋ฌผ์— ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š์€ ์ง€์—ญ์„ ํ†ตํ•ด ํ•™๊ต๋ฅผ ๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง‘์—์„œ ํ•™๊ต๊นŒ์ง€ ๊ฐ€๋Š” ๊ธธ์€ 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๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ง‘๊ณผ ํ•™๊ต๊ฐ€ ๋ฌผ์— ์ž ๊ธด ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

m/ n/ puddles/ return

4 3 [[2, 2]] 4

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ๐Ÿ’ก ์ขŒ์ƒ๋‹จ->์šฐํ•˜๋‹จ์˜ ์ตœ๋‹จ๊ฒฝ๋กœ ํ๋ฆ„์—์„œ, ํŠน์ • ์œ„์น˜๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ ์ˆ˜๋Š” ์™ผ์ชฝ ์œ„์น˜๊ฐ€ ๊ฐ€์ง„ ๊ฒฝ๋กœ์˜ ์ˆ˜ + ์œ„์ชฝ ์œ„์น˜๊ฐ€ ๊ฐ€์ง„ ๊ฒฝ๋กœ์˜ ์ˆ˜์ด๋‹ค. ๊ฐ์ž์˜ ๊ฒฝ์šฐ์—์„œ โžก๏ธ/ โฌ‡๏ธ ์ผ€์ด์Šค๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 โœ”๏ธ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ์œ„์น˜๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ์˜ ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 โœ”๏ธ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ์œ„์น˜๊ฐ€ ๋ฌผ์›…๋ฉ์ด ์œ„์น˜๊ฑฐ๋‚˜, ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๊ณณ์ด๋ฉด ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ๋กœ 0์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 โœ”๏ธ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์ด๊ณ , ์ด์— ๋Œ€ํ•œ ์ตœ๋‹จ๊ฒฝ๋กœ ์ˆ˜๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉด ์ด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

 โœ”๏ธ ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์™ผ์ชฝ ์œ„์น˜๊ฐ€ ๊ฐ€์ง„ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ์ˆ˜์œ„์ชฝ ์œ„์น˜๊ฐ€ ๊ฐ€์ง„ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ด๋ฅผ ๋”ํ•œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 DP ์–ด๋ ต๋‹ค...................

 ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)์œผ๋กœ ํ‘ธ๋Š” ์ •์„ ์ฝ”๋“œ์ด๋‹ˆ ์ด๊ฒƒ๋„ ์ฝ”๋“œ ํ๋ฆ„์„ ์•”๊ธฐํ•ด๋‘๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ํŒŒ์ด์ฌ(Python)

def solution(m, n, puddles):
    div = 1000000007
    dp = [[0 for _ in range(m+1)] for _ in range(n+1)]
    for pd in puddles:
        dp[pd[0]][pd[1]] = -1
    dp[1][1] = 1

    def routes(n, m):
        if dp[n][m] > 0:
            return dp[n][m]
        if n < 1 or m < 1 or dp[n][m] == -1:
            return 0
        dp[n][m] = routes(n-1, m)+routes(n, m-1)
        return dp[n][m]

    return routes(n, m) % div


m = 4
n = 3
puddles = [[2, 2]]
print(solution(m, n, puddles))

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ