Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

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

meeeeejin 2021. 4. 6. 17:10

๋ฌธ์ œ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/42898

 

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

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

programmers.co.kr

 

 

๋ฌธ์ œ ์„ค๋ช…

ํ•ด๋‹น ์ขŒํ‘œ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” dp ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. 

์ด๋™์€ ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜๋กœ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ (x, y)์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ (x - 1, y)์—์„œ ์˜ค๊ฑฐ๋‚˜ (x, y - 1)์—์„œ ์˜ค๋Š” 2๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. 

๋ฌธ์ œ์—์„œ๋Š” mxn ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์ด๋ผ๊ณ  ํ–ˆ์ง€๋งŒ ๋ฆฌ์ŠคํŠธ ์ธ๋ฑ์‹ฑ์˜ ํŽธ์˜์ƒ n์„ ํ–‰, m์„ ์—ด๋กœ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

  1. (n + 1) X (m + 1) ํฌ๊ธฐ์˜ dp ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  0์œผ๋กœ ์ดˆ๊ธฐํ™”
  2. dp[1][1]์— 1 ์ €์žฅ (์ง‘ ์ขŒํ‘œ)
  3. puddles ์ขŒํ‘œ๋ฅผ dp ํ…Œ์ด๋ธ”์— -1๋กœ ์ €์žฅ
  4. ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š์€ ์ขŒํ‘œ์— ๋Œ€ํ•ด
    1) ์œ„์ชฝ์—์„œ ์˜ค๋Š” ๋ฐฉ๋ฒ• (x - 1, y)์˜ ๊ฐ€์ง“์ˆ˜์™€
    2) ์™ผ์ชฝ์—์„œ ์˜ค๋Š” ๋ฐฉ๋ฒ• (x, y - 1)์˜ ๊ฐ€์ง“์ˆ˜๋ฅผ ๋”ํ•จ
  5. dp[n][m]์„ ๊ณ„์‚ฐํ•  ๋•Œ๊นŒ์ง€ 4๋ฒˆ ๊ณผ์ • ๋ฐ˜๋ณต
  6. dp[n][m]์„ 1000000007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๋ฐ˜ํ™˜

 

 

 

 

์†Œ์Šค์ฝ”๋“œ

def solution(m, n, puddles):
    dp = [[0] * (m + 1) for _ in range(n + 1)]
    dp[1][1] = 1
    # ๋ฌผ์— ์ž ๊ธด ๊ณณ ํ‘œ์‹œ
    for (y, x) in puddles:
        dp[x][y] = -1
    
    for x in range(1, n + 1):
        for y in range(1, m + 1):
            if dp[x][y] != -1: # ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š์€ ๊ณณ
                # ์œ„์ชฝ์—์„œ ์˜ค๋Š” ๋ฐฉ๋ฒ•
                if x > 1 and dp[x - 1][y] != -1: dp[x][y] += dp[x - 1][y]
                # ์™ผ์ชฝ์—์„œ ์˜ค๋Š” ๋ฐฉ๋ฒ•
                if y > 1 and dp[x][y - 1] != -1: dp[x][y] += dp[x][y - 1]

    return dp[n][m] % 1000000007

 

 

 

 

 

728x90