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

728x90
๋ฐ˜์‘ํ˜•

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

 

๋ฌธ์ œ

 

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

์ •์ˆ˜ 4๋ฅผ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ์ด 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ํ•ฉ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” ์ˆ˜๋ฅผ 1๊ฐœ ์ด์ƒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ํ•ฉ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์ˆ˜์˜ ์ˆœ์„œ๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์นœ๋‹ค. 1+1+1+1 2+1+1 (1+1+2, 1+2+1) 2+2

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ๊ธฐ์กด์˜ 1, 2, 3 ๋”ํ•˜๊ธฐ ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ๋กœ ์ƒ๊ฐํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DFS๋กœ ์กฐํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€๊ณ ์ž ํ•œ๋‹ค๋ฉด N์ด 10000์ด๋ผ๋Š” ๋ฒ”์œ„๋ฅผ ๊ฐ™๊ธฐ์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ DP๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•œ๋‹ค.

 

์‚ฌ์šฉํ•œ ์ˆ˜ 1, 2, 3์˜ ์ˆœ์„œ๋กœ ๊ตฌํ•˜๋ฉด ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด DP ๋ฐฐ์—ด์„ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์€ ๊ทœ์น™์„ ๊ฐ€์ง์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด N์ด 4๋ผ๋ฉด 1, 2, 3์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ 1๊ฐ€์ง€์ด๋‹ค. 2์˜ ๊ฒฝ์šฐ 1์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ + ์•ž์—์„œ ๊ตฌํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ˆ„์ ๋œ๋‹ค. 3์˜ ๊ฒฝ์šฐ๋„ 2์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ ํ›„์— ์•ž์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ˆ„์ ํ•˜์—ฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜๊ฐ€ 2์ด๊ณ  ๊ตฌํ•˜๋Š” ์ˆ˜๊ฐ€ 2์ธ ๊ฒฝ์šฐ
    • 1๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1์ด๋‹ค.
    • ์ด๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1์ด๋‹ค. ๋”ฐ๋ผ์„œ 2๊ฐ€ ๋œ๋‹ค.
  • ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜๊ฐ€ 2์ด๊ณ  ๊ตฌํ•˜๋Š” ์ˆ˜๊ฐ€ 4์ธ ๊ฒฝ์šฐ
    • ์•ž์„œ ๊ตฌํ•œ 2๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 2์ด๊ณ , 1๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” 1์ด๋ฏ€๋กœ 3์ด ๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ 2์˜ ๊ฒฝ์šฐ `dp[i] += dp[i - 2]`์™€ ๊ฐ™์€ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ๊ณ , 3์˜ ๊ฒฝ์šฐ `dp[i] += dp[i - 3]`๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


if __name__ == '__main__':
    t = int(stdin.readline())
    dp = [1] * 10001

    for i in range(2, 10001):
        dp[i] += dp[i - 2]

    for i in range(3, 10001):
        dp[i] += dp[i - 3]

    for _ in range(t):
        n = int(stdin.readline())
        print(dp[n])

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€