[boj] (g5) 5557 1학년

강신현·2022년 4월 22일
0

✅ DP

문제

링크

1. 문제 접근 및 해결 로직

구하고자 하는 값이 가능한 수식의 수이므로 dp에는 n번째까지 가능한 수식의 수를 저장하면서 진행해야 한다.

n번째 수를 수식에 사용할 수 있는지 없는지는 n-1에서의 값에 n번째 수를 더하거나 뺐을때 0 이상 20 이하인지 아닌지에 따라 결정된다.

  • 정의
  • 구하는 답
    dp[N1][arr[N]]dp[N-1][arr[N]]
  • 초기값
    dp[1][arr[1]]=1dp[1][arr[1]]=1
  • 점화식
    if(j+arr[n]<=20)dp[n][j+arr[n]]+=dp[n1][j]if(j+arr[n]<=20) dp[n][j+arr[n]]+=dp[n-1][j]
    if(jarr[n]>=0)dp[n][jarr[n]]+=dp[n1][j]if(j-arr[n]>=0) dp[n][j-arr[n]]+=dp[n-1][j]
    jjdp[n1][j]>0dp[n-1][j]>0을 만족하는(바로 전 수까지 사용했었는지) j

2. 코드

3. 시간 복잡도 분석

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

4. 문제에서 중요한 부분

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

profile
땅콩의 모험 (server)

0개의 댓글