풀만했던 문제!
처음엔 DP로 풀어야하나 했는데 간단하게 풀리는 문제였다
//P는 0과 N 사이 class Solution { public int solution(int[] A) { // write your code in Java SE 8 //N=2인 경우, P는 반드시 1 int N=A.length; if(A.length==2) return Math.abs(A[0]-A[1]); //P=1인 경우를 basecase로 둠 int min=0; int fsum=A[0]; int rsum=0; for(int i=1; i<N; i++) rsum+=A[i]; min=Math.abs(rsum-fsum); for(int i=2;i<A.length; i++){ //i는 P의 인덱스 fsum=fsum+A[i-1]; rsum=rsum-A[i-1]; if(min>Math.abs(fsum-rsum)) min=Math.abs(fsum-rsum); } return min; } }
간단한 논리이다.
P는 1부터 N-1까지 이동할 수 있고,
1부터 늘어나는 과정을 생각해보면, P가 늘어날 때 마다 A[P-1]이 앞 파트에 더해지고 뒤파트에서는 빠지게된다.
O(N)포문 두개만 돌리면 문제 해결이 가능하다.
'이론 > 문제풀이' 카테고리의 다른 글
[카카오 코드페스티벌 본선 1] 단체사진 찍기 (C++) (0) | 2018.08.02 |
---|---|
[Codility] Lesson 3- PermCheck (0) | 2018.08.01 |
[Codility] Lesson3 - PermMissingElem (0) | 2018.07.30 |
[Codility] Lesson2- OddOccurrencesInArray (0) | 2018.07.30 |
[Codility] Lesson3 - Time complexity (0) | 2018.07.30 |