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

2021. 2. 1. 18:23ใ†๐Ÿ“š Algorithm/๐Ÿ’ช๐Ÿป Python ๋ฌธ์ œ ํ’€์ด

๋ฐ˜์‘ํ˜•
 

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

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

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

ํ’€์ด ๊ณผ์ •

์ „ํ˜•์ ์ธ 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]]))

 

 

 

๋ฐ˜์‘ํ˜•