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

[C언어 풀이] Codility - Lessons 5, (Prefix Sums) PassingCars

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

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

https://www.codility.com/

 
 
 
 
문제.

 

설명

 

배열 A[] 에는 0과 1로만 이뤄진 요소들이 있습니다.

 

이 문제는 0이 1을 몇번 지나치는지 구하는 문제입니다.

 

 위 예제로 설명해 보자면

 

A[] = 이 있습니다.

 

A[0] = 0 이므로 1을 총 3번 지납니다.

A[2] = 0 이므로 1을 총 2번 지납니다.

 

리턴 값은 5를 반환해 주면 됩니다.

 

즉, 0 기준으로 앞에 1이 얼만큼 있나 구하는 것입니다.

 

단, 카운트 값은 1,000,000,000을 초과하면 안됩니다.!

 

(문제 이해를 처음에 못해서 다른 사람이 설명 써 놓은걸 보고 알았습니다.)

 

 

 
 
결과

 

 

https://app.codility.com/demo/results/trainingYQ3JPK-U7Y/

 

 

 

 

소스코드

// you can write to stdout for debugging purposes, e.g.
// printf("this is a debug message\n");

int solution(int A[], int N) {
    // write your code in C99 (gcc 6.2.0)
    int i, count = 0;
    unsigned int sum = 0;
     
     
    for(i = N - 1; i >= 0; i--){
        if(A[i] == 1)
            count++;
        else
            sum += count;
    }
         
    if(sum > 1000000000 || sum < 0)
        return -1;
         
    return sum;
}
​

 

 

 

아주 쉽습니다. 배열 맨 끝에서 부터 1의 카운트 값을 세면 0이 총 몇번 지났는지 알 수 있습니다.

 

단, 예외처리 하는데 좀 애먹었습니다.

 

0이 1을 총 지난 값은 1,000,000,000을 넘지 말아야 하는데,

 

정수는 -2,147,483,648 ~ 2,147,483,647 까지 표현이 가능 합니다.

 

결과 값중 정수의 최대 값을 넘어버리는 결과 값도 도출이 되서 이를

 

unsigned int 로 바꿔서 해결 했습니다. 

반응형

댓글


스킨편집 -> html 편집에서