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

728x90
๋ฐ˜์‘ํ˜•

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

 

๋ฌธ์ œ

 

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

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

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 1, 2, 3์˜ ํ•ฉ์œผ๋กœ N์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ ์ž ํ•  ๋•Œ ์ˆ˜์‹์ด ๋Œ€์นญ์ธ ๊ฒฝ์šฐ๋งŒ ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด N์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜์—ดํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

  • N์€ 1์ธ ๊ฒฝ์šฐ: 1๊ฐœ
    • `1`
  • N์€ 2์ธ ๊ฒฝ์šฐ: 2๊ฐœ
    • `1 + 1`
    • `2`
  • N์€ 3์ธ ๊ฒฝ์šฐ: 2๊ฐœ
    • `1 + 1 + 1`
    • `3`
  • N์€ 4์ธ ๊ฒฝ์šฐ: 3๊ฐœ
    • `1 + 1 + 1 + 1`
    • `2 + 2`
    • `4`
  • N์€ 5์ธ ๊ฒฝ์šฐ: 3๊ฐœ
    • `1 + 1 + 1 + 1 + 1`
    • `2 + 1 + 2`
    • `5`
  • N์€ 6์ธ ๊ฒฝ์šฐ: 4๊ฐœ
    • `1 + 1 + 1 + 1 + 1 + 1`
    • `2 + 2 + 2`
    • `3 + 3`
    • `6`

 ์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  N์ด 7์ธ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋ฉด `1 + 5 + 1`, `2 + 3 + 2`, `3 + 1 + 3`๊ณผ ๊ฐ™์ด ์–‘ ์˜†์œผ๋กœ 1, 2, 3์„ ๋ถ™์ด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์กด์žฌํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ค‘๊ฐ„์— ์˜ค๋Š” ์ˆซ์ž์ธ `5, 3, 1`์€ ์•ž์—์„œ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•˜์˜€์œผ๋ฏ€๋กœ `3 + 2 + 1 = 6`์ด๋ผ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์ ํ™”์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค๋ฉด `dp[N - 2] + dp[N - 4] + dp[N - 6]`์ด๋‹ค. ์ฆ‰, ์ ํ™”์‹ ์•ž์—์„œ ๋ถ€ํ„ฐ ์–‘ ์˜†์œผ๋กœ 1, 2, 3์ด ๋ถ™๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


if __name__ == '__main__':
    MAX = 100001
    divisor = 1000000009
    dp = [0, 1, 2, 2, 3, 3, 6] + [0] * (MAX - 7)

    for i in range(7, MAX):
        dp[i] = (dp[i - 2] + dp[i - 4] + dp[i - 6]) % divisor

    t = int(stdin.readline())

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