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

728x90
๋ฐ˜์‘ํ˜•

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

 

๋ฌธ์ œ

 

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

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ •์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. n์€ ์–‘์ˆ˜์ด๋ฉฐ 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์•ž์˜ ๋ฌธ์ œ๋“ค๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ์™€ ์ง์ˆ˜์ธ ๊ฒฝ์šฐ์— ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜๋ˆ ์„œ ์ถœ๋ ฅํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ DP๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, `DP[ํ™€์ˆ˜/์ง์ˆ˜][N]`๊ณผ ๊ฐ™์ด ์„ ์–ธํ•˜์—ฌ์„œ ๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ ํ™”์‹์„ ํ†ตํ•ด ์ฐพ์•„๊ฐ€๋ฉด ๋œ๋‹ค.

 

  • N์ด 1 ์ธ ๊ฒฝ์šฐ
    • ์ง์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ : X
    • ํ™€์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ : `1`
  • N์ด 2์ธ ๊ฒฝ์šฐ
    • ์ง์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ : `1 + 1`
    • ํ™€์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ : `2`
  • N์ด 3์ธ ๊ฒฝ์šฐ
    • ์ง์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ : `1 + 2`, `2 + 1`
    • ํ™€์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ : `3`, `1 + 1 + 1`

 ์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜์—ดํ•ด๋ณด๋ฉด ์ ํ™”์‹ `DP[ํ™€์ˆ˜][N] = DP[์ง์ˆ˜][N - 1] + DP[์ง์ˆ˜][N - 2] + DP[์ง์ˆ˜][N - 3]`๊ณผ `DP[์ง์ˆ˜][N] = DP[ํ™€์ˆ˜][N - 1] + DP[ํ™€์ˆ˜][N - 2] + DP[ํ™€์ˆ˜][N - 3]`๋ฅผ ์ด๋Œ์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


if __name__ == '__main__':
    MAX, ODD, EVEN = 100001, 0, 1
    divisor = 1000000009
    dp = [[0] * 100001 for _ in range(2)]

    dp[ODD][1] = 1
    dp[ODD][2], dp[EVEN][2] = 1, 1
    dp[ODD][3], dp[EVEN][3] = 2, 2

    for i in range(4, MAX):
        dp[ODD][i] = \
            (dp[EVEN][i - 1] + dp[EVEN][i - 2] + dp[EVEN][i - 3]) % divisor
        dp[EVEN][i] = \
            (dp[ODD][i - 1] + dp[ODD][i - 2] + dp[ODD][i - 3]) % divisor

    t = int(stdin.readline())

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