1, 2, 3 더하기 해설
주어진 숫자 n
을 1
, 2
, 3
의 합으로 만드는 모든 경우의 수를 구하는 문제입니다.
이 함수는 동적 프로그래밍
의 타뷸레이션 방식
을 사용합니다.
타뷸레이션은 계산 결과를 테이블에 저장하고, 이후의 계산에서 이전에 계산된 값을 재사용하는 방식입니다.
함수 구현
-
기본 경우 처리
:-
n < 3
인 경우,n
을 그대로 반환합니다.n
이 1이나 2일 때 가능한 경우의 수는 각각 1과 2입니다. -
n == 3
인 경우, 경우의 수는 4이므로 4를 반환합니다.
-
-
타뷸레이션을 위한 배열 초기화
:dp
배열을[0, 1, 2, 4]
로 초기화합니다. 여기서dp[i]
는n=i
일 때의 경우의 수를 저장합니다.
-
동적 프로그래밍으로 경우의 수 계산
:- 4부터
n
까지의 각 숫자에 대해,dp[i]
는dp[i - 1]
,dp[i - 2]
,dp[i - 3]
의 합으로 업데이트됩니다. 이는n=i
를 만드는 경우의 수가n=i-1
,n=i-2
,n=i-3
를 만드는 경우의 수의 합과 같음을 의미합니다.
- 4부터
모범 답안
def solution(n): # 기본 경우 처리 if n < 3: return n if n == 3: return 4 # 타뷸레이션을 위한 배열 초기화 dp = [0, 1, 2, 4] # 동적 프로그래밍으로 경우의 수 계산 for i in range(4, n + 1): dp.append(dp[i - 1] + dp[i - 2] + dp[i - 3]) return dp[n]
사용 예시
입출력 예시
print(solution(4)) # 출력: 7
solution(4)
를 호출하면, 4를
만드는 경우의 수는 다음과 같습니다:
- 1 + 1 + 1 + 1
- 1 + 1 + 2
- 1 + 2 + 1
- 2 + 1 + 1
- 2 + 2
- 1 + 3
- 3 + 1
따라서 총 7가지 방법이 있으며, 이는 함수가 올바르게 7을 반환함을 나타냅니다.
가이드라인
AI 튜터
배포
디자인
업로드
수업 노트
즐겨찾기
도움말