[ Codility ] - Lesson3 TapeEquilibrium(C++)

문제조건

  • 값이 정의된 벡터 A

문제풀이

int solution(vector<int> &A) {
    int N = A.size();

    if(N==2) { return abs(A[0]-A[1]); } 	// 원소가 하나 또는 두개일 때, 바로 리턴
    if(N==1) { return abs(A[0]); }

    long long lsum = 0, rsum = 0, sum=0;
    int P, temp;

    for(int i = 0; i < N; i++)
    {
        sum += A[i];				// rsum을 구하기 위해 모두 더한 값 구하기
    }
    
    for(int i = 0; i < N-1; i++)
    {
        lsum += A[i];
        rsum = sum-lsum;
        temp = abs(lsum - rsum);		// 두 수의 차를 절대값으로 저장

        if (!(i)) { P = temp; }			// i가 0일 때, 즉 첫 반복에서 temp로 초기화
        else if(P > temp) { P = temp; }		// 작은 값이 나올때마다 P에 저장
    }

    return P;
}

코드설명

  일단 원소의 개수가 1개 또는 2개일 경우엔 바로 반환이 가능하니 프로그램 시작 전에 깔쌈하게 끝내고 들어가는데 안 해줘도 되긴합니다. 그 뒤엔 rsum의 값 즉 빼줄 값을 구하기 위해 모든 원소의 합을 구해줍니다. 그렇게 원소의 값을 모두 구하고나면 원래 문제의 의도대로 왼쪽 값에서 오른쪽 값을 빼고, 그 때마다 나온 값 중 작은 값을 계속 저장하고 있다가 프로그램이 끝나면서 반환해주는 코드 입니다.

딱히 꼬인 부분이 있다거나 그런게 아니라 설명이라 할 게 없네요.

결과사진

좋은 웹페이지 즐겨찾기