프로그래머스/Lv. 1

[프로그래머스 코딩테스트] 없는 숫자 더하기(Java)

Sigfriede 2023. 4. 6. 01:06

  문제 설명

  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
class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        boolean[] num = new boolean[10];
        
        for (int i = 0; i < numbers.length; i++) {
            num[numbers[i]] = true;
        }
        for (int i = 0; i < num.length; i++) {
            if (!num[i]) {
                answer += i;
            }
        }
        return answer;
    }
}

  boolean 배열을 10 크기로 만들어줍니다. for문이 numbers의 길이만큼 순회합니다. num의 numbers[i]  인덱스를 true로 만들어줍니다. 이 for문은 배열에 있는 숫자만을 true로 배열에 할당하므로, numbers 배열에 어떤 숫자가 없는지 확인할 수 있습니다. 이후 for문에서 num의 길이만큼 순회하면서 num[i]의 값이 true가 아닌 값을 찾아 answer에 더하기 할당 합니다.

  다른 분들은 계수정렬이라는 방법을 사용하기도 하는 것 같습니다. 제 풀이가 계수정렬은 아니지만 계수정렬과 유사한 구조의 풀이인 것 같습니다. 또는 0-9까지의 합은 항상 45이므로, 45에서 numbers의 합을 빼주는 풀이도 있었습니다. 후자의 방법이 가장 쉬운 것 같기는 합니다.