코딩놀이: python C C++

[C, 프로그래머스] lv1. 없는 숫자 더하기, C 배열

jiheek 2022. 6. 23. 15:53

https://programmers.co.kr/learn/courses/30/lessons/86051?language=c 

 

코딩테스트 연습 - 없는 숫자 더하기

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

programmers.co.kr

 

첫 번째 시도

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

// size_t: unsigned int
int solution(int numbers[], size_t numbers_len) {
    int answer = 0;
    int idx = 0;
    int count[10] = {-1};
    for (int i = 0; i < numbers_len; i++) {
        idx = numbers[i];
        count[idx] = 1;
    }
    for (int i = 0; i < 10; i++) {
        if (count[i] != 1) {
            answer += i;
        }
    }
    return answer;
}

void main() {
    int input[] = {1, 2, 3, 4, 6, 7, 8, 0};
    int input2[] = { 5,8,4,0,6,7,9 };

    int answer = solution(input, 8);
    int answer2 = solution(input2, 7);

    printf("%d, %d",answer, answer2);
}

visual studio에 옮겨 풀어서 main함수도 있다.

단순하게 모든 숫자를 옮기고, 하나하나 다시 카운트해서 더했다. 정답이긴 했지만 뭔가 아쉽..!

 

 

 

두 번째 시도

int solution(int numbers[], size_t numbers_len) {
    int answer = 45;
    int idx = 0;
    for (int i = 0; i < numbers_len; i++) {
        answer -= numbers[i];
    }
    return answer;
}

void main() {
    int input[] = {1, 2, 3, 4, 6, 7, 8, 0};
    int input2[] = { 5,8,4,0,6,7,9 };

    int answer = solution(input, 8);
    int answer2 = solution(input2, 7);

    printf("%d, %d",answer, answer2);
}

하나하나 더하는게 아니라 반대로 생각해서, 0~9까지 더한 값 45에서 numbers 값들을 빼주었다.

훨 간단해졌음!

 

 

배열 초기화

//1. 배열 선언, 초기화 동시에 진행. 크기는 3으로 자동 정해짐
int array[] = {1,2,3} 

//2. 역시 선언, 초기화 동시 진행. 크기가 10이고, 첫 번째 원소만 -1이고 나머지는 0인 배열
int array[10] = {-1}

//3. 아래처럼 따로는 안됨
int array[7]; 
array = { 5,8,4,0,6,7,9 }; //ERROR!!

//4. 따로 하려면 원소 하나씩 초기화 해주어야 한다
int array[3];
array[0]=1;
array[1]=2;
array[2]=3;