코딩뿌시기(연습)

[Java] 없는 숫자 더하기

thisnorm 2025. 1. 22. 14:51

문제 설명

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

 

 

제한 사항

  • 1 ≤ numbers의 길이 ≤ 9
    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.

 

 

 

 

입출력 예

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

 


 

 

이번 문제는 시행 착오를 많이 겪었다. 미처 그 겪는 과정을 남기지 못해서 이번 포스팅에는

전부 기록하지 못했다. 가장 먼저 내가 떠올린 알고리즘은 0~9가 담긴 rest 배열을 만들고 최종적으로

이중for문으로 rest[i] 와 numbers[j] 를 비교하여 없는 숫자는 answer에 더하는거였다.

하지만 이러면 문자열 초과했을 때 오류가 날 수 있어서 다르게 바꾸게 되었다.

아래가 새롭게 만든 코드이다.

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        boolean[] present = new boolean[10];
        
        for (int i = 0; i < numbers.length; i++) {
            int number = numbers[i];
            
            if(0 <= number && number <= 9) {
                present[number] = true;
            }
        }
        
        for(int i = 0; i <= 9; i++) {
            if(!present[i]) {
                answer += i;
            }
        }
        return answer;
    }
}

present 라는 현재 0~9 사이의 값이 존재하는지를 판별해줄 배열이다.

0~9 사이의 값이 존재하는지를 present 배열에 ture or false로 담고

마지막에 for문으로 false면 i 값을 더해 나가는 식이다.

 

그런데 여느때와 같이 좋아요 수가 가장 많은 다른 사람의 풀이를 보았다.

하지만 이번에는 신선한 충격을 받을 수 있었다.

조건이 주어지고 이것을 절차대로 말그대로 수행시키려고 코드를 짜느라 다른 방식은 생각해 보지 못하였는데

이 사람은 근본적으로 다가가 풀이한 것이었다.

class Solution {
    public int solution(int[] numbers) {
        int sum = 45;
        for (int i : numbers) {
            sum -= i;
        }
        return sum;
    }
}

너무 당연한 것인데 문제에 파묻혀 생각해내지 못한 부분이다.

앞으로 다른 부분에 대해서 더 생각해봐야겠다.