[ 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의 값 즉 빼줄 값을 구하기 위해 모든 원소의 합을 구해줍니다. 그렇게 원소의 값을 모두 구하고나면 원래 문제의 의도대로 왼쪽 값에서 오른쪽 값을 빼고, 그 때마다 나온 값 중 작은 값을 계속 저장하고 있다가 프로그램이 끝나면서 반환해주는 코드 입니다.
딱히 꼬인 부분이 있다거나 그런게 아니라 설명이라 할 게 없네요.
결과사진
Author And Source
이 문제에 관하여([ Codility ] - Lesson3 TapeEquilibrium(C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sunmangul123/Codility-Lesson3-TapeEquilibriumC저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)