[DP] Target Sum
2021. 4. 5. 12:09ㆍ프로그래밍-코딩테스트/LeetCode
양의 정수들로 이루어진 배열이 주어질 때 + 와 - 를 적절히 사용해서 특정 합 S 를 만들 수 있는 경우의 수를 찾는 문제
DP로 문제를 풀어보려한다.
배열에 있는 원소중 A그룹은 양수가 될 것이고, B그룹은 음수가 될 것이다.(배열에는 모두 양수인 정수이다)
따라서 A그룹은 우측 연산에 의해 (S+sum)/2로 표현된다
아래부터 A그룹은 target이라 부른다
일단 S가 sum보다 크거나 연산값이 홀수라면 답이 나올수 없으므로 경계값을 처리해준다
이후 findSubSet이라는 함수를 만들어 nums와 target을 넘겨준다
이 target은 양수가 될 원소들을 모두 합한 부분합이다
이것을 dp라는 배열로 만들것인데, dp[ i ]의 값은 target이 i가 되는 경우의 수이다.
i를 기준으로 Loop를 돌며 dp를 구해준다
코드에 주석으로도 달았지만, 예컨데 nums= [1, 3, 4], S=6이라고 해보자
이 경우 부분합(target)이 7이 될텐데, 7의 양수를 만들기 위해서는 dp[ 7-1 ] + dp [ 7-3 ] + dp[ 7-4 ]가 될 것이다
왜냐하면 dp[6]은 target이 6이 되는 경우의 수 인데, target을 7로 만들기위해선 1을 더해주는 방법 뿐이므로 이 시점까지 경우의 수가 dp[7]과 같다. 그러나 이는 3,4일때도 해당되는 설명이므로 모든 케이스대로 연산해주는 것이다.
이때 루프는 원소의 값보다 클떄까지만 돌려주면 된다.
'프로그래밍-코딩테스트 > LeetCode' 카테고리의 다른 글
[DP, Tree] House Robber III (0) | 2021.04.05 |
---|---|
[Tree] Validate Binary Search Tree (0) | 2021.04.05 |
[Linked List] Sort List (0) | 2021.04.01 |
[Array, Greedy] Jump Game II (0) | 2021.04.01 |
[Array, Greed] Jump Game (0) | 2021.04.01 |