없는 숫자 더하기

bumjinkim·2021년 10월 23일
0
post-thumbnail

👟 단계

프로그래머스 1단계 (완료)


💻 사용 언어

C


📄문제 내용

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


✍ 문제 조건

1) 1 ≤ numbers의 길이 ≤ 9
2) 0 ≤ numbers의 모든 수 ≤ 9
3) numbers의 모든 수는 서로 다릅니다.


입출력 예시)

numbersresult
[1,2,3,4,6,7,8,0]14
[5,8,4,0,6,7,9]6

⌨ 코드작성

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

// numbers_len은 배열 numbers의 길이입니다.

int solution(int numbers[], size_t numbers_len) {

int answer = 0;

for(int i=0; i<10; i++)
     
    for(int j=0; j<numbers_len; j++)
         
        if(numbers[j] == i) answer +=i; 
        
answer = 45 - answer;
    
return answer;
    }

🔔해결방법 및 내가 접근한 방식

👉<조건확인>

먼저 조건식을 살펴보면, numbers 에서 찾을 수 없는 '수'
전부 더하라고 한다.
위의 입출력 예시를 들어보자 1,2,3,4,6,7,8,0 이 주어졌다.
1~9에서 저 숫자들을 제외하면 "5 , 9"가 남는다.
따라서 결과값이 저 두개를 더한 "14"가 나오는 것이다.

🔑<접근방식 및 풀이>

numbers의 입력값 들을 알아내기 위해 for문을 활용했다.
임의의 정수 i를 설정해서 numbers[ ]의 숫자들을 일일이 대조해봤다.
numbers의 입력값 들을 알아야 그 나머지 값들을 알 수 있기 때문.

그렇다면 만약에(if문) numbers[ ]의 입력값을 i와 비교했을 때,
같다면 answer에 더해주는 것이다.
모든 숫자들을 더해주면 최종적으로 numbers[ ]에 입력값 들을
모두 더해준것이 된다.
하지만 우리가 원하는 건 numbers에 입력하지 않는 값들의 합이다.
"엥?? 그러면 잘 못 푼거 아닌가요?"
거꾸로 생각하면 모든 숫자의 합 (1~9)에서
우리가 더한 값들을 빼면 자연스레 나머지의 합을 알아낼 수 있다.


👨🏻‍💻 코테를 풀어보며 느낀점

처음에 너무 어렵게 생각해서 하나하나 대조해보며 풀어봤었는데 단순하게 생각하면 금방 풀리는 문제였다.
간단한 문제지만 조금만 변형하면 엄청 어려운 문제로
변할 수 있다는 점에서 이 문제를 풀면서 많은걸 배웠다.

profile
프로그래밍의 새싹

1개의 댓글

comment-user-thumbnail
2021년 10월 25일

귀엽네용

답글 달기

관련 채용 정보