본문 바로가기

Coding Test/프로그래머스 연습

[JAVA] 없는 숫자 더하기

문제 설명

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

 

👽내 코드

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        
        //0~9까지 모든 수의 합 더하기
        for(int i = 0; i < 10; i++){
         answer += i;
        }
        
        //배열에 있는 값 빼기
        for(int number : numbers){
            answer -= number;
        }
        return answer;
    }
}

 

처음에는 이중 for문을 생각했었다.

그런데 생각해보니 그렇게하면 없는 숫자를 찾는 것이 오히려 힘들 것이라 생각이 들었음

그럼 있는 숫자들을 빼면 되는게 아닌가? 역으로 생각해서 답 도출

 

🌈다른 풀이

import java.util.*;
class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        int[] sum = {0,1,2,3,4,5,6,7,8,9};

        for(int i = 0; i< sum.length; i++){
            for(int j=0; j< numbers.length; j++){
                if(sum[i] == numbers[j]){
                    sum[i] -= numbers[j];
                }
            }
            answer += sum[i];
        }
        return answer;
    }
}

 

이 풀이는 숫자가 발견되지 않을 경우에 어떻게 뺴지? 라는 생각을 다른 방식으로 역으로 생각한 것 같다.

숫자가 발견됐을 떄, 그 숫자를 0~9에서 차감하는 식으로 했다.

발견된 경우 sum 배열에서 차감하여 0으로 만든다음 바로 answer배열에 sum을 더했다.