코딩테스트 - 없는숫자 더하기, C언어

728x90
반응형

없는 숫자 더하기,

 

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

 

문제를 해결하는 방법은 2가지다.

 

1. 0부터 9까지 모두 더하면 45다. 배열 numbers에 있는 모든 숫자를 더한 다음 45에서 빼면 간단하게 해결

2. 배열에서 없는 숫자를 골라낸 다음 더하는 방법

 

실제로 기업에서 이런 테스트가 나왔을 때 1번과 같이 해결한다? 코딩 테스트는 통과하겠지만 풀이 과정 또한 중요하기 때문에 나 같으면 틀린 것으로 채첨 할 것 같다. 문제에는 분명 "모두 찾아 더한 수"라고 되어 있다. 1번 과같이 해결한 방법은 더한수를 리턴한 건 맞지만 찾지는 않았다.

 

뭐 아무튼 문제대로 찾아서 더해보자. 

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// numbers_len은 배열 numbers의 길이입니다.
int solution(int numbers[], size_t numbers_len) {
    int answer = 0;
    int temp=0, j=0;

    for (int i = 0; i < numbers_len; i++) { // bubble sort
        for (j = 0; j < (numbers_len - 1) - i; j++) {
            if (numbers[j] > numbers[j + 1]) {	 // > 오름차순, < 내림차순 
                temp = numbers[j];
                numbers[j] = numbers[j + 1];
                numbers[j + 1] = temp;
            }
        }
    }
    
    j=0;
    for(int i = 0; i < 10; i++)    {
        if(numbers[j] == i) {
            j++;
        }
        else {
            answer += i;
        }
    }
    
    return answer;
}

 

방법은 numbers를 오름차순으로 정렬해 0부터 9 순서로 맞춰놓고, 이 중에 없는 걸 찾아서 더 했다.

728x90
반응형