문제. 백준 파이썬 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 더하기
나의 풀이 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까지 값을 직접 넣어보며 계산을 해보았고 그 결과 해당 문제가 점화식 형태인 것을 알 수 있었습니다. 이에 재귀 함수를 이용하여 미리 만들어놓은 점화식을 풀어 문제를 해결하였습니다.
반응형
'Tests > 백준' 카테고리의 다른 글
[BOJ] 백준 파이썬 > 11053번 가장 긴 증가하는 부분 수열 (0) | 2020.09.25 |
---|---|
[BOJ] 백준 파이썬 > 1158번 요세푸스 문제 (0) | 2020.09.23 |
[BOJ] 백준 파이썬 > 4949번 균형잡힌 세상 (0) | 2020.09.21 |
[BOJ] 백준 파이썬 > 10814번 나이순 정렬 (0) | 2020.09.20 |
[BOJ] 백준 파이썬 > 1181번 단어 정렬 (0) | 2020.09.19 |
댓글