본문 바로가기
Coding Test

[Coding Test] 프로그래머스 Lv1. 없는 숫자 더하기

by pearhyunjin 2024. 4. 8.

 

 

프로그래머스 Lv1 중 서치 없이 푸는데 실패한 문제를 정리한 내용입니다.

정리 내용 출처는 아래를 참고해 주세요.

 


 

문제 설명

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

 

제한사항

-) 1 <= numbers의 길이 <= 9

-) 0 <= Number의 모든 원소 <= 9

-) numbers의 모든 원소는 서로 다르다.

 

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

 

 

 

방식1 해설

0부터 9까지의 숫자 중 numbers에 존재하지 않는 값의 합을 구해야 한다.

이때 반대로 생각해 0부터 9까지를 전부 더해준 후에 numbers에 존재하는 값들을 빼는 방식으로 풀었다.

반복문만을 이용해 간단하게 풀 수 있었다.

class Solution {
    public static void main(String[] args) {
    	System.out.println(solution(new int[]{1, 2, 3, 4, 6, 7, 8, 0})); //14
        System.out.println(solution(new int[]{5, 8, 4, 0, 6, 7, 9})); // 6
    }
    
    public static int solution(int[] numbers) {
    	int answer = 0;
        
        for (int j = 0; j <= 9; j++) {
            answer += j;
        }
        
        for (int i = 0; i < numbers.length; i++) {
            answer -= numbers[i];
        }
        
        return answer;
    }
}

 

 

방식2 해설

0부터 9까지의 IntStream 생성해서 이용한다.

numbers의 원소가 조건을 만족하지 않으면(idx와 일치하지 않으면) 반환하여 전부 더해준다.

 

* noneMatch() : 주어진 모든 요소들이 조건을 만족하지 않으면 반환

class Solution {
    public static void main(String[] args) {
    	System.out.println(solution(new int[]{1, 2, 3, 4, 6, 7, 8, 0})); // 14
        System.out.println(solution(new int[]{5, 8, 4, 0, 6, 7, 9})); // 6
    }
    
    public int solution(int[] numbers) {
        return IntStream.rangeClosed(0, 9)
                        .filter(idx -> Arrays.stream(numbers).noneMatch(number -> number == idx))
                        .sum();
    }
}