[boj] (s1) 1309 동물원

강신현·2022년 4월 22일
0

✅ DP

문제

링크

1. 문제 접근 및 해결 로직

인접한 칸에는 사자를 놓을 수 없으므로 한 행에는 최대 한마리의 사자만 놓을 수 있다.

이전 행에 사자를 두칸 중 어디에 놓았는지, 아니면 놓지 않았는지에 따라 이번 행에 놓을 위치가 정해진다.

이번 행에 사자를 놓는 경우의 수는 3가지 이다.
1. 아에 놓지 않는다.
2. 왼쪽에 놓는다.
3. 오른쪽에 놓는다.

  • 정의
    dp[n][0]dp[n][0] : nn 번째 칸에 사자를 놓지 않은 경우의 수
    dp[n][1]dp[n][1] : nn 번째 칸에 사자를 왼쪽 칸에 놓은 경우의 수
    dp[n][2]dp[n][2] : nn 번째 칸에 사자를 오른쪽 칸에 놓은 경우의 수
  • 구하는 답
    dp[n][0]+dp[n][1]+dp[n][2]dp[n][0]+dp[n][1]+dp[n][2]
  • 초기값
    dp[1][0]=1dp[1][0]=1
    dp[1][1]=1dp[1][1]=1
    dp[1][2]=1dp[1][2]=1
  • 점화식
    dp[n][0]=dp[n1][0]+dp[n1][1]+dp[n1][2]dp[n][0]=dp[n-1][0]+dp[n-1][1]+dp[n-1][2]
    dp[n][1]=dp[n1][0]+dp[n1][2]dp[n][1]=dp[n-1][0]+dp[n-1][2]
    dp[n][2]=dp[n1][0]+dp[n1][1]dp[n][2]=dp[n-1][0]+dp[n-1][1]

2. 코드

3. 시간 복잡도 분석

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

4. 문제에서 중요한 부분

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

profile
땅콩의 모험 (server)

0개의 댓글