본문 바로가기
코딩테스트/Codility

[C언어 풀이] Codility - Lessons 3, (Time Complexity) TapeEquilibrium

by Hwan2 2019. 2. 21.
728x90
반응형

이 문제는 Codility 사이트에서 확인하고 문제를 풀 수 있습니다.

https://www.codility.com/

 
 
문제
 

 

설명
 
배열앤 -1,000 ~ 1,000사이의 수가 랜덤으로 주어 집니다.
배열의 길이는 N 입니다.
 
P의 값중 가장 작은 값을 반환하면 되는데, P를 구하는 방법은 이렇습니다.
 
A[0] - A[1] + A[2] + A[3] + A[4] = P1.
(A[0] + A[1)] - (A[2] + A[3] + A[4]) = P2.
(A[0] + A[1] + A[2]) - (A[3] + A[4]) = P3.
(A[0] + A[1] + A[2] + A[3]) - A[4] = P4.
 
P값들 중 가장 작은 값을 반환 하면 됩니다.
단, P값은 절대 값으로 반환 존재해야 합니다.
 
 
 
결과

 

https://app.codility.com/demo/results/trainingRF95WS-FNF/

 

 

 

 

소스코드

int solution(int A[], int N) {
    // write your code in C99 (gcc 6.2.0)
      int i, sum = 0, result = 10000, min = 0, sum_A = 0;
     
    for(i = 1; i < N; i++)
        sum += A[i];
     
    for(i = 0; i < N-1; i++){
        min = (sum_A + A[i]) - sum;
        sum_A += A[i];
        sum -= A[i+1];
         
        if(min < 0)
            min *= -1;
         
        if(result > min)
            result = min;
    }
     
    return result;
}
​

 

 

우선 전체 배열 요소의 합을 구한 후 첫 요소부터 빼가면서 P값을 구했습니다.

 

주의해야 할 점은 배열 요소중 -1,000 단위도 있어서 많이 했갈렸는데,

 

결국 P값만 절대 값만 되면 되므로 신경은 안써도 됐습니다.

 

 

반응형

댓글


스킨편집 -> html 편집에서