본문 바로가기
Self Dev./Codility

[Codility] TapeEquilibrium 100%

by 지구 2019. 9. 8.
주 1회 회사 동기들이랑 알고리즘 스터디를 진행하고 있다.
현재 진행하고 있는 스터디는 오프라인 코딩테스트로도 많이 활용하고 있는 Codility.
각자 풀고 자기가 푼 소스를 리뷰하는 형식인데, 뜻 깊고 보람도 있고 참으로 도움이 많이 된다 :)
뛰어나진 않지만 각 단원 별로 100% 만들기 위해 노력 중이고, 기록 및 공유하기 위해 글을 작성한다.

바로가기   >Codility   >TapeEquilibrium

 

문제 해석 : 배열의 원소 전체 합을 어느 지점에서 나눴을 경우, A 와 B 를 절대값을 먹여서 뺐을 때 가장 작은 차를 리턴하는 문제.

문제 풀이 : 배열 값의 총 합(sum)을 계산하고, groupA 에 어느 지점만큼의 총 합을 넣은 뒤
sum 에서 groupA 를 빼면 나머지 그룹인 groupB 가 나온다. 따라서 리턴값은 | groupA - groupB | 

요고 핵심은 절대값을 계산해주는 "MAth.abs()" 함수 🌝

 

import java.lang.Math;
import java.util.*;

class Solution {
    public int solution(int[] A) {
        // 1. 배열 값의 총 합 계산
        int sum = 0;
        for (int val : A) {
            sum += val;
        }
        
        // 2. 의미 없는 수로 비교하지 않도록 result 초기화
        List result = new ArrayList();
        int groupA = 0;
        int groupB = 0;
        for (int i=0; i<A.length-1; i++) {
            // A[0], A[0]+A[1], A[0]+A[1]+A[2] .. 누적 계산 fac = 3,4,6,10 계산
            groupA += A[i];
            groupB = sum-groupA; // 10,9,7,3 계산
            
            result.add(Math.abs(groupA-groupB));
        }
        
        return (int)Collections.min(result);
    }
}

 

 

반응형

'Self Dev. > Codility' 카테고리의 다른 글

[Codility] MissingInteger 100%  (0) 2019.09.08
[Codility] PermCheck 100%  (0) 2019.09.08
[Codility] PermMissingElem 100%  (0) 2019.09.08
[Codility] FrogJmp 100%  (0) 2019.09.08
[Codility] CyclicRotation 100%  (0) 2019.09.07

댓글