์•Œ๊ณ ๋ฆฌ์ฆ˜/DP

[๋ฐฑ์ค€ 15989 ๐Ÿฅˆ] 1, 2, 3 ๋”ํ•˜๊ธฐ 4

1eehyunji 2023. 8. 18. 17:56
 

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

๋ฌธ์ œ

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

  • 1+1+1+1
  • 2+1+1 (1+1+2, 1+2+1)
  • 2+2
  • 1+3 (3+1)

์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

๋ฌธ์ œํ’€์ด

import sys

t=int(sys.stdin.readline())
for _ in range(t):
    n=int(sys.stdin.readline())
    if n>3:
        dp = [[0] * (4) for _ in range(n + 1)]
        dp[1][1] = 1
        dp[2][1] = 1
        dp[2][2] = 1
        dp[3][1] = 1
        dp[3][2] = 1
        dp[3][3] = 1
        for i in range(4, n+1):
            dp[i][1]=dp[i-1][1]
            dp[i][2]=dp[i-2][1]+dp[i-2][2]
            dp[i][3]=dp[i-3][1]+dp[i-3][2]+dp[i-3][3]
        print(dp[n][1]+dp[n][2]+dp[n][3])
    else:
        if n==1:
            print(1)
        elif n==2:
            print(2)
        elif n==3:
            print(3)
  • 2์ฐจ์› ๋ฐฐ์—ด์˜ DP๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฌธ์ œ๋‹ค.
  • 1,2,3์„ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์ˆ˜ n์— ๋Œ€ํ•œ dp ๋ฐฐ์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธํ•œ๋‹ค.
    • dp[n][1] : n์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” '1' ๋งŒ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์กฐํ•ฉ
    • dp[n][2] : n์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” 2๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜๋“ค(1,2)๋กœ ๋งŒ๋“ค์–ด์ง„ ์กฐํ•ฉ์ด๋ฉด์„œ '2'๋กœ ๋๋‚˜๋Š” ์กฐํ•ฉ
    • dp[n][3] : n์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” 3๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜๋“ค(1,2,3)์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์กฐํ•ฉ์ด๋ฉด์„œ '3'์œผ๋กœ ๋๋‚˜๋Š” ์กฐํ•ฉ
    • ๊ทธ ์ด์œ ๋Š” '1+1+2','1+2+1', '2+1+1'์ฒ˜๋Ÿผ ๊ฐ™์€ ์ˆ˜๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์กฐํ•ฉ์„ ์ค‘๋ณตํ•ด์„œ ์นด์šดํŒ…ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, n์ด 4์ผ ๋•Œ, dp[4][2]๋Š” 2๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜๋“ค๋กœ ๋งŒ๋“ค์–ด์ง„ ์กฐํ•ฉ์ด๋ฉด์„œ '2'๋กœ ๋๋‚˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— '1+1+2'๋งŒ ์„ธ์–ด์ค€๋‹ค.
  • ์ด์ œ ์ ํ™”์‹์„ ์„ธ์›Œ์„œ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
  • dp[n][1]=dp[n-1][1]
    • ์˜ˆ๋ฅผ ๋“ค์–ด, dp[3][1]์€ '1+1+1'๋กœ ํ•˜๋‚˜ ๋ฟ์ธ๋ฐ, dp[4][1]๋„ ์—ฌ๊ธฐ์— 1์„ ๋”ํ•œ '1+1+1+1' ํ•˜๋‚˜ ๋ฟ์ด๋‹ค. 
    • dp[n][1]์—๋Š” 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์กฐํ•ฉ ๋‹จ ํ•˜๋‚˜๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. 
  • dp[n][2]=dp[n-2][1]+dp[n-2][2]
    • ์˜ˆ๋ฅผ ๋“ค์–ด, dp[2][1]์˜ ๊ฒฝ์šฐ๋Š” '1+1', dp[2][2]์˜ ๊ฒฝ์šฐ๋Š” '2'๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    • ์—ฌ๊ธฐ์„œ dp[4][2]='1+1+2', '2+2' ์ด๋‹ค.
    • ๋งˆ์ง€๋ง‰์— 2๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด, n๋ณด๋‹ค 2๋งŒํผ ์ž‘์€ ์ˆ˜์˜ 1 ๋˜๋Š” 2๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ์— +2๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, n๋ณด๋‹ค 2๋งŒํผ ์ž‘์€ ์ˆ˜์˜ 1 ๋˜๋Š” 2๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ•ฉ์นœ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
  • dp[n][3]=dp[n-3][1]+dp[n-3][2]+dp[n-3][3]
    • ์˜ˆ๋ฅผ ๋“ค์–ด, dp[4][1]='1+1+1+1', dp[4][2]='1+1+2' / '2+2', dp[4][3]='1+3' n=4์ผ ๋•Œ๋Š” ์ด 4๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. 
    • ๊ทธ๋ ‡๋‹ค๋ฉด dp[7][3]์€ '1+1+1+1+3', '1+1+2+3', '2+2+3', '1+3+3'๊ณผ ๊ฐ™์ด ์œ„ ๊ฒฝ์šฐ์— +3์„ ํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, n๋ณด๋‹ค 3๋งŒํผ ์ž‘์€ ์ˆ˜์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๊ฐ™๋‹ค. 
  • n์ด 4 ์ด์ƒ ๋˜์–ด์•ผ ์œ„ ์ ํ™”์‹์„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— n์ด 0๋ถ€ํ„ฐ 3๊นŒ์ง€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ง์ ‘ ์„ธ์„œ dp ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  n์ด 4์ผ ๋•Œ๋ถ€ํ„ฐ ๋ชฉํ‘œํ•˜๋Š” ์ˆ˜๊นŒ์ง€ for๋ฌธ์„ ๋Œ๋ฉด์„œ dp ๋ฐฐ์—ด์„ ์ฑ„์šฐ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์—” ํ•ด๋‹น ์ˆ˜์˜ ๋ชจ๋“  dp ๋ฐฐ์—ด์„ ๋ชจ๋‘ ํ•ฉํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.