👟 단계
프로그래머스 1단계 (완료)
💻 사용 언어
C
📄문제 내용
0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다.
"numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수"를
return 하도록 solution 함수를 완성해주세요.
✍ 문제 조건
1) 1 ≤ numbers의 길이 ≤ 9
2) 0 ≤ numbers의 모든 수 ≤ 9
3) numbers의 모든 수는 서로 다릅니다.
입출력 예시)
numbers | result |
---|---|
[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)에서
우리가 더한 값들을 빼면 자연스레 나머지의 합을 알아낼 수 있다.
👨🏻💻 코테를 풀어보며 느낀점
처음에 너무 어렵게 생각해서 하나하나 대조해보며 풀어봤었는데 단순하게 생각하면 금방 풀리는 문제였다.
간단한 문제지만 조금만 변형하면 엄청 어려운 문제로
변할 수 있다는 점에서 이 문제를 풀면서 많은걸 배웠다.
귀엽네용