[boj] (s3) 9095 1,2,3 더하기

강신현·2022년 4월 19일
0

✅ DP

문제

링크

1. 문제 접근 및 해결 로직

구성 숫자가 같아도 순서가 다른 것은 다른 조합으로 친다.
따라서 f(n)f(n)을 정수 nn 을 1,2,3의 합으로 나타내는 방법의 수라고 하고
몇가지를 구해보면
f(1)=1f(1)=1

{1}

f(2)=2f(2)=2

{1,1}
{2}

f(3)=4f(3)=4

{1,1,1}
{1,2}
{2,1}
{3}

f(4)=7f(4)=7

{1,1,1,1}
{1,2,1}
{2,1,1}
{1,1,2}
{3,1}
{1,3}
{2,2}

여기서 다음과 같은 규칙을 발견할 수 있다.
f(4)=f(3)+f(2)+f(1)=4+2+1=7f(4)=f(3)+f(2)+f(1)=4+2+1=7

따라서 점화식은
f(n)=f(n1)+f(n2)+f(n3)f(n)=f(n-1)+f(n-2)+f(n-3) 이다.

의사코드

  • 정의
    f(n)f(n) : 정수 nn 을 1,2,3의 합으로 나타내는 방법의 수
  • 구하는 답
    f(n)f(n)
  • 초기값
    f(1)=1f(1)=1
    f(2)=2f(2)=2
    f(3)=4f(3)=4
  • 점화식
    f(n)=f(n1)+f(n2)+f(n3),(n>3)f(n)=f(n-1)+f(n-2)+f(n-3),(n>3)

2. 코드

3. 시간 복잡도 분석

경우의 수를 모두 구하므로
O(N)O(N)

4. 문제에서 중요한 부분

DP문제는 점화식을 도출하는 것이 중요하다.
Bottm Up(반복문)으로 풀지 Top Down(재귀)으로 풀지는 선택사항

profile
땅콩의 모험 (server)

0개의 댓글

관련 채용 정보