๋ฐฑ์ค€ 9095: 1,2,3 ๋”ํ•˜๊ธฐ (DP)

2021. 5. 31. 15:46ใ†๐Ÿ’ป ๊ฐœ๋ฐœ/Algorithm

https://www.acmicpc.net/problem/9095

 

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

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

www.acmicpc.net

ํŠน์ • ์ˆซ์ž๋ฅผ ์ฃผ์–ด์ง„ ์ •์ˆ˜๋“ค์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ๋ฌธ์ œ์ด๋‹ค. 

์ •์ˆ˜ 4๋ฅผ 1,2,3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋“  ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

 

์ •์ˆ˜ n์€ ์–‘์ˆ˜์ด๋ฉฐ 11๋ณด๋‹ค ์ž‘๋‹ค๊ณ  ์ฃผ์–ด์กŒ์œผ๋ฏ€๋กœ 1๋ถ€ํ„ฐ ๊ตฌํ•ด๋ณธ๋‹ค๋ฉด,

1์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” 1๋งŒ ํ•„์š”ํ•˜๊ธฐ๋•Œ๋ฌธ์— => 1๊ฐ€์ง€ 

2๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” (1+1), (2) => 2๊ฐ€์ง€

3์„ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด (1+1+1), (1+2), (2+1), (3) => 4๊ฐ€์ง€ 

 

์˜ˆ์ œ์—์„œ ์ฃผ์–ด์ง„ 4๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์˜ 1~3๊นŒ์ง€์˜ ๊ฐ€์ง€์ˆ˜๋ฅผ ๋ชจ๋‘ ํ•ฉํ•˜๋ฉด ๋œ๋‹ค. 

 

5์„ ๋‚˜ํƒ€๋‚ด๋ณด๋ฉด,

(1,1,1,1,1), (1,1,1,2), (1,1,2,1), (1,2,1,1,), (2,1,1,1), (1,1,3), 

(1,3,1), (3,1,1), (1,2,2), (2,2,1), (2,1,2), (2,3), (3,2) => 13๊ฐ€์ง€

13 = 2+4+7๋กœ๋ถ€ํ„ฐ ๊ณ„์‚ฐ๋œ๊ฒƒ. ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค. 

n = int(input())

def solution(x):
  if x == 1:
    return 1
  elif x == 2:
    return 2
  elif x == 3:
    return 4
  else:
    return solution(x-1) + solution(x-2) + solution(x-3)
for i in range(n):
  x = int(input())
  print(solution(x))