본문 바로가기
Tests/백준

[BOJ] 백준 파이썬 > 9095번 1,2,3 더하기

by 코딩하는 금융인 2020. 9. 22.

문제. 백준 파이썬 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의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.

입력

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

출력

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

 

입출력 예제

출처 : 백준 9095번 1,2,3 더하기

 

9095번: 1, 2, 3 더하기

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

www.acmicpc.net


나의 풀이 in Python

#[BOJ] 백준 파이썬 > 9095번 1,2,3 더하기
# number가 1일 때 : 1, 2일 때 : 2, 3일 때 : 4, 4일 떄 : 7, 5일 때 13
# 예시를 통해 점화식 형태임을 알 수 있다. F(n) = F(n-3) + F(n-2) + F(n-1)
# 점화식과 재귀를 이용하서 풀어보기

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

처음에는 [1,2,3] 리스트를 이용하여 조합을 통해 경우의 수를 체크하는 문제인 줄 알았습니다.

하지만 permutations를 이용할 경우, 숫자 값이 클 때 상당히 비효율적으로 코드가 작동하여 시간 초과가 나오는 문제가 발생했습니다.

이에 예시를 통해 1부터 5까지 값을 직접 넣어보며 계산을 해보았고 그 결과 해당 문제가 점화식 형태인 것을 알 수 있었습니다. 이에 재귀 함수를 이용하여 미리 만들어놓은 점화식을 풀어 문제를 해결하였습니다.

반응형

댓글