코딩테스트 문제

프로그래머스 없는 숫자 더하기

brianshin96 2023. 11. 21. 09:38

문제 설명

 

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

 

제한사항

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

제한사항을 보면 numbers배열에 중복값이 들어가지 않는다. 그렇다면 Array sort를 이용해 numbers를 정렬하고, 숫자값을 대조해 없는 숫자를 찾아 answer에 더하면 될것이다.

 

전에 사용한적 없던

IntStream.of(array).anymatch(x -> x == y)는 int배열에 요소들을 x, 찾고 싶은 값을 y로 했을때 결과를 boolean값으로 주는 메서드이다.

import java.util.Arrays;
import java.util.stream.IntStream;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
    
        Arrays.sort(numbers);
        
        for (int i = 0; i <= 9; i++) {
            int test = i;
            if (!IntStream.of(numbers).anyMatch(x -> x == test)) {
                answer += test;
            }
        }
        return answer;
    }
}

 

원래는 for문 안에 있는 i를 따로 test변수에 지정해주지 않으면 아래와 같은 에러가 나타났다.

/Solution.java:12: error: local variables referenced from a lambda expression must be final or effectively final
            if (!IntStream.of(numbers).anyMatch(x -> x == i)) {
                                                          ^
1 error