[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개의 댓글

관련 채용 정보