ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 1890 ์ ํ”„ with Python
    PS 2022. 8. 9. 17:33
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 1890 ์ ํ”„

    ๐Ÿ’ก ์กฐ๊ฑด

    1. Nร—N ๊ฒŒ์ž„ํŒ์— ์ˆ˜๊ฐ€ ์ ํ˜€์ ธ ์žˆ๋‹ค.
      N (4 โ‰ค N โ‰ค 100)
    1. ์ด ๊ฒŒ์ž„์˜ ๋ชฉํ‘œ๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์นธ์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์œผ๋กœ ๊ทœ์น™์— ๋งž๊ฒŒ ์ ํ”„๋ฅผ ํ•ด์„œ ๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.
      ๊ฐ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” ํ˜„์žฌ ์นธ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
      ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 9๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋ฉฐ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์—๋Š” ํ•ญ์ƒ 0์ด ์ฃผ์–ด์ง„๋‹ค.
    1. ๋ฐ˜๋“œ์‹œ ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์•„๋ž˜์ชฝ์œผ๋กœ๋งŒ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.
      0์€ ๋” ์ด์ƒ ์ง„ํ–‰์„ ๋ง‰๋Š” ์ข…์ฐฉ์ ์ด๋ฉฐ, ํ•ญ์ƒ ํ˜„์žฌ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋งŒํผ ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์•„๋ž˜๋กœ ๊ฐ€์•ผ ํ•œ๋‹ค.
    1. ํ•œ ๋ฒˆ ์ ํ”„๋ฅผ ํ•  ๋•Œ, ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๋ฉด ์•ˆ ๋œ๋‹ค.
      ์ฆ‰, ํ•œ ์นธ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ ํ”„๋ฅผ ํ•˜๊ฑฐ๋‚˜, ์•„๋ž˜๋กœ ์ ํ”„๋ฅผ ํ•˜๋Š” ๋‘ ๊ฒฝ์šฐ๋งŒ ์กด์žฌํ•œ๋‹ค.
    1. ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์นธ์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์œผ๋กœ ๊ทœ์น™์— ๋งž๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.
    1. DP ์œ ํ˜•์˜ ๋ฌธ์ œ

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    4
    2 3 3 1
    1 2 1 3
    1 2 3 1
    3 1 1 0

    ์‹คํ–‰๊ฒฐ๊ณผ

    3

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด ๋ฌธ์ œ๋Š” ํ•˜๋‚˜ํ•˜๋‚˜ ๊ฒฝ๋กœ๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด์„œ dfs๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋งค์šฐ ํฌ๊ฒŒ ๋‚˜์˜จ๋‹ค.
    1. ๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š”๋ฐ, ์šฐ๋ฆฌ๋Š” ๋ฌธ์ œ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์— ์ฃผ๋ชฉ์„ ํ•ด์„œ ํ’€๋ฉด ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.
      ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 9๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋ฉฐ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์—๋Š” ํ•ญ์ƒ 0์ด ์ฃผ์–ด์ง„๋‹ค.
      ๋ฐ˜๋“œ์‹œ ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์•„๋ž˜์ชฝ์œผ๋กœ๋งŒ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.
      0์€ ๋” ์ด์ƒ ์ง„ํ–‰์„ ๋ง‰๋Š” ์ข…์ฐฉ์ ์ด๋ฉฐ, ํ•ญ์ƒ ํ˜„์žฌ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋งŒํผ ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์•„๋ž˜๋กœ ๊ฐ€์•ผ ํ•œ๋‹ค.
    1. (0, 0)์—์„œ ์‹œ์ž‘ํ•ด (n - 1, n - 1) ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ DP ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ด๋‚˜๊ฐ€๋ฉด์„œ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๋ฉด,
      ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์•ฝ O(N * N) ์ด ๋‚˜์˜จ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜๋”๋ผ๋„ ์ตœ๋Œ€ ์•ฝ 10,000 ์ •๋„๋ฐ–์— ์•ˆ๊ฑธ๋ฆฐ๋‹ค.
      DP ๋ฆฌ์ŠคํŠธ๋Š” n * n ํฌ๊ธฐ์˜ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค๊ณ , (0, 0)์€ 1๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    1. 2์ค‘ for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋งŒ์•ฝ ํ˜„์žฌ ์œ„์น˜ํ•œ ๊ณณ์ด (n - 1, n - 1) ์ด๋ผ๋ฉด dp[i][j]๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.
    1. (4)๋ฒˆ์˜ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, (i, j)์— ํ•ด๋‹นํ•˜๋Š” arr์˜ ๊ฐ’์„ cur ๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.
      ํ˜„์žฌ ์œ„์น˜์ธ (i, j) ์—์„œ ์šฐ์ธก์œผ๋กœ cur ๋งŒํผ ์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, dp[i][j + cur]์— dp[i][j]๋ฅผ ๋”ํ•ด์ค€๋‹ค.
      ํ˜„์žฌ ์œ„์น˜์ธ (i, j) ์—์„œ ํ•˜๋‹จ์œผ๋กœ cur ๋งŒํผ ์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, dp[i + cur][j]์— dp[i][j]๋ฅผ ๋”ํ•ด์ค€๋‹ค.

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from sys import stdin
    
    n = int(stdin.readline())
    arr = []
    for _ in range(n):
        arr.append(list(map(int, stdin.readline().split())))
    
    dp = [[0] * n for _ in range(n)]
    dp[0][0] = 1
    
    
    for i in range(n):
        for j in range(n):
            if i == n - 1 and j == n - 1:
                print(dp[i][j])
                break
    
            cur = arr[i][j]
    
            if j + cur < n:
                dp[i][j + cur] += dp[i][j]
    
            if i + cur < n:
                dp[i + cur][j] += dp[i][j]
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.