ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

1, 2, 3 ๋”ํ•˜๊ธฐ ์‹œ๋ฆฌ์ฆˆ

 

๋ฌธ์ œ

 

15992๋ฒˆ: 1, 2, 3 ๋”ํ•˜๊ธฐ 7

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 1,000,000,009๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹จ, ์‚ฌ์šฉํ•œ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” m๊ฐœ ์ด์–ด์•ผ ํ•œ๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

N์ด๋ผ๋Š” ์ˆ˜๋ฅผ 1, 2, 3์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ•  ๋•Œ, M๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ˆ˜ N๊ณผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•˜๋Š” ์ˆซ์ž M์ด ์žˆ์œผ๋ฏ€๋กœ 2์ฐจ์› ๋ฐฐ์—ด์ธ `dp[๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ˆ˜][์‚ฌ์šฉํ•œ ์ˆ˜]`๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•˜๋ฉด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • N์ด 1์ธ ๊ฒฝ์šฐ
    • 1๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • N์ด 2์ธ ๊ฒฝ์šฐ
    • ํ•˜๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ: 2
    • ๋‘๊ฐœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ: 1 + 1
  • N์ด 3์ธ ๊ฒฝ์šฐ
    • ํ•˜๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ: 3
    • ๋‘ ๊ฐœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ: 1 + 2, 2 + 1
    • ์„ธ ๊ฐœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ: 1 + 1 + 1

 ์ฆ‰, ๊ฐ ์ˆซ์ž๋งˆ๋‹ค ๋ช‡ ๊ฐœ์˜ ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜๋ฉด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ ํ™”์‹ `dp[N][M] = dp[N - 1][M - 1] + dp[N - 2][M - 1] + dp[N - 3][M - 1]`์„ ์ด๋Œ์–ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. 

 

์ฝ”๋“œ

from sys import stdin


if __name__ == '__main__':
    MAX = 1001
    divisor = 1000000009
    dp = [[0] * MAX for _ in range(MAX)]

    # 1์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
    dp[1][1] = 1
    # 2๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์ž‡๋Š” ๊ฒจ์šฐ
    dp[2][1] = 1
    dp[2][2] = 1
    # 3์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
    dp[3][1] = 1
    dp[3][2] = 2
    dp[3][3] = 1

    for i in range(4, MAX):
        # ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” ํ˜„์žฌ์ˆ˜์˜ ํฌ๊ธฐ ๋งŒํผ์ด๋‹ค.
        # ์˜ˆ๋ฅผ ๋“ค์–ด 5์˜ ๊ฒฝ์šฐ ์ˆซ์ž 6๊ฐœ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.
        for j in range(1, i + 1):
            dp[i][j] = (dp[i - 1][j - 1] + dp[i - 2][j - 1] + dp[i - 3][j - 1]) % divisor

    t = int(stdin.readline())

    for _ in range(t):
        n, m = map(int, stdin.readline().split())
        print(dp[n][m])
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€