Algo

[Codility] Lesson3. TapeEquilibrium

S.Zinlee 2018. 10. 25. 01:42

1. 문제

N 개의 정수 배열 A를 0<P<N 조건의 P를 기준으로 (좌측의 합 - 우측의 합)의 절대값의 최소값 구하기



2. 풀이

좌측의 합 - 우측의 합을 순차적으로 구하기 위해 전체의 합에서 우측의 합을 빼 나가는 방법으로 진행하기로 했다.

결국 P가 1부터 시작하여 N-1까지가는 각 경우의 |좌측의 합 - 우측의 합|은 전체 A배열의 합에서 A[0]부터 A[N-2]까지를 각각 2번(좌측 값 + 우측의 더해진 값)씩 빼주는 결과와 같기 때문에 Arrays.stream(A).sum()에서 A[0]*2부터 A[N-2]*2를 빼주며 최소 값을 찾으면 된다.


예)

A [0] = 3, A [1] = 1, A [2] = 2, A [3] = 4, A [4] = 3  의 경우

전체 합인 13에서 A[0]*2 인 6를 빼면 P = 1일 때는 7

그 다음 합인 7에서 A[1]*2 인 2를 빼면 P = 2일 때는 5

그 다음 합인 5에서 A[2]*2 인 4를 빼면 P = 3일 때는 1

그 다음 합인 1에서 A[3]*2 인 8를 빼면 P = 4일 때는 -7 즉, 절대값인 7

하여 이 중 최소 값은 1이 된다.



3. 결과

Task Score : 100%

Correctness : 100%

Performance : 100%



4. 코드 및 테스트 코드

TapeEquilibrium Code