티스토리 뷰
링크 : https://codility.com/programmers/lessons/3-time_complexity/tape_equilibrium/
문제>
*n개의 배열에서 A[0]~A[p-1]까지의 합(=P)과 A[p]~A[n-1]까지의 합(=N)의 차(P-N)의 절대값을 구해 가장 작은 수를 출력하라.
**P = A[0] +.. + A[p-1]);
**N = A[p] +.. + A[n-1];
**abs = |P - N|;
해결방법 0. ( 정확도 100%, 퍼포먼스 33% ) 쓰레기..
*) 2중 for문 사용.
1) 첫번째 for문에서 A의 0~n-1개 까지 누적으로 더하고( = P)
- 내부의 두번째 for문 p 부터 n - 1을 더한다( = N)
- N과 P를 뺀 절대값을 누적해서 더 작은 값이 나올 때 교체해준다.
* 첫번째 for문 돌때 내부의 for문이 남은 수 만큼 계속 돌기 때문에 좋은 방법이 아니다.
해결방법 1. ( 정확도 100%, 퍼포먼스 100% )
1) A의 값을 전부 더한다. = N
2) for문을 A의 수만큼 돌면서 N서 순차로 뺴고 뺀 값을 P에 더한다.
- N과 P를 뺀 절대값을 누적해서 더 작은 값이 나올 때 교체해준다.
* 미리 N의 합을 구해놓고 N에서 뺀 값을 P에 더하기 때문에 매번 N의 합을 구하는 계산이 줄어든다.
'주간 알고리즘풀기' 카테고리의 다른 글
[171116][Codility](C#)Missing Integer (0) | 2017.11.20 |
---|---|
[171117][Codility](C#)Fish (0) | 2017.11.20 |
[171113][HackerRank](C#)Picking Numbers (0) | 2017.11.14 |
[171110][HackerRank](C#)Jim and the Orders (0) | 2017.11.14 |
[171109][HackerRank](C#)Missing Numbers (0) | 2017.11.10 |
댓글