문제

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

 

9095번: 1, 2, 3 더하기

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

www.acmicpc.net

정수 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의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.

출력

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

 

코드

import sys
input = sys.stdin.readline

n = int(input())
for _ in range(n):
    k = int(input())
    if k == 1:
        print(1)
    elif k == 2:
        print(2)
    elif k == 3:
        print(4)
    else:
        answer = [0]*(k+1)
        answer[1] = 1
        answer[2] = 2
        answer[3] = 4
        for i in range(4, k+1):
            answer[i] = answer[i-1] + answer[i-2] + answer[i-3]
        print(answer[k])

 

n이 1, 2, 3일 때는 방법의 수를 간단히 구할 수 있고 이 값을 n이 4 이상인 경우부터 사용해야 하기 때문에 미리 배열에 저장해둔다.

n이 4 이상인 경우부터

(n-1의 경우의 수에 1을 더한 경우) + (n-2의 경우의 수에 2를 더한 경우) + (n-3의 경우의 수에 3을 더한 경우)

가 답이 된다.

예를 들어, n = 4 일때

1+1+1 / 1+2 / 2+1 / 3   ->    n = 3 인 경우의 끝에 1을 더한 경우

1 + 1 / 2   ->   n = 2 인 경우의 끝에 2를 더한 경우

1   ->   n = 1 인 경우우의 끝에 3을 더한 경우

들의 합인 7이 정답이 된다.

 

 

오랜만에 !!!! 나 혼자 뚝딱 풀고 제출했더니 맞았던 문제 !!!

저번 동적 프로그래밍 문제 풀면서, 동적 프로그래밍 생각이 안 나서 결국 복잡하게 구현하다가 시간초과가 났었다.

이번에는 문제 보자마자 동적 프로그래밍 생각이 났구, 그대로 풀어보니 정답이 나왔다.

동적 프로그래밍 문제 중에서 기본 중의 기본 문제지만 그래도 뿌듯뿌..ㅎㅎ

'Algorithm' 카테고리의 다른 글

[백준] 2606 바이러스 / python  (0) 2024.04.12
[백준] 2193 이친수 / python  (0) 2024.04.11
[백준] 1072 게임 / python  (0) 2024.04.10
[백준] 1735 분수 합  (0) 2024.04.08
[백준] 1003 피보나치 함수 / python  (1) 2024.04.07

+ Recent posts