ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

1, 2, 3 λ”ν•˜κΈ° μ‹œλ¦¬μ¦ˆ

 

문제

 

9095번: 1, 2, 3 λ”ν•˜κΈ°

문제 μ •μˆ˜ 4λ₯Ό 1, 2, 3의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” 방법은 총 7가지가 μžˆλ‹€. 합을 λ‚˜νƒ€λ‚Ό λ•ŒλŠ” 수λ₯Ό 1개 이상 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 μ •μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, n을 1, 2, 3의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ”

www.acmicpc.net

 

문제 풀이

 μ΄μ „에 ν’€μ—ˆλ˜, 11726 2xn 타일링, 11727 2xn 타일링 2κ³Ό 같이 μ–΄λ– ν•œ 경우의 μˆ˜κ°€ μžˆλŠ”μ§€ νŒŒμ•…ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. n에 따라 λ°œμƒν•  수 μžˆλŠ” 경우의 μˆ˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

 

  • n = 1 (1개)
    • 1
  • n = 2 (2개)
    • 1 + 1, 2
  • n = 3 (4개)
    • 1 + 1 + 1, 1 + 2, 2 + 1, 3
  • n = 4 (7개)
    • 1 + 1 + 1 + 1, 2 + 1 + 1, 1 + 2 + 1, 1 + 1 + 2, 2 + 2, 1 + 3, 3 + 1
  • n = 5 (13개)
  • n = 6 (24개)

μœ„μ™€ 같은 경우의 수λ₯Ό κ°€μ§€κ²Œ 되며, 점화식 `f(n) = f(n - 1) + f(n - 2) + f(n - 3)`을 μ΄λŒμ–΄ λ‚Ό 수 μžˆλ‹€.

 

 

μ½”λ“œ

if __name__ == '__main__':
    for _ in range(int(input())):
        target = int(input())
        cases = [1, 2, 4]
        for i in range(3, target):
            cases.append(sum(cases[-3:]))
        print(cases[target - 1])
728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€