알고리즘/프로그래머스

[프로그래머스] 없는 숫자 더하기 for JAVA

정석이 2021. 11. 25. 18:35

https://programmers.co.kr/learn/courses/30/lessons/86051?language=java 

 

코딩테스트 연습 - 없는 숫자 더하기

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

programmers.co.kr

 

 

문제

 

 

 


 

내가 푼 방법

 

 

구하는게 없는 숫자의 합이므로 1~9까지 더한 45에서 numbers를 모두 더한 값을 뺐다.

 

 

 

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

 

 

 

 

 

 


 

다른 사람 풀이

 

 

 

 

 

나랑 똑같은 방법을 사용했지만 이분은 45에서 numbers를 다 빼줬다.

 

 

 

 

 

IntStream 함수를 사용했다. IntStream은 자바8에 추가되었다. 처음봄ㅋ

 

원시데이터형 int를 스트림으로 다룰 수 있게 되었다고 한다. 굉장히 파이썬같이 생긴......

 

 

IntStream.range(0, 10) 하면 0~9까지 for문을 돌린거랑 같다. .filter()는 조건을 필터링해주는거고

.distinct()였으면 중복제거임

 

filter() 안에 조건인 i -> Arrays.stream(numbers).noneMatch(num -> i == num) 을 해석해보면

 

Arrays.stream(numbers)로 배열 스트림을 선언하고 numbers를 넣어준다.

 

 

아래는 스트림을 매칭시키는 메소드이다.

 

allMatch()  : 모든 요소들이 매개값(Predicate)으로 주어진 조건을 만족하는지 조사
anyMatch()  : 최소한 한 개의 요소가 주어진 조건에 만족하는지 조사
noneMatch()  : 모든 요소들이 주어진 조건을 만족하지 않는지 조사

 

여기서는 noneMatch()를 사용했으므로 i == num이 아니라면 sum()을 해주는 거라고 해석할 수 있다.

 

 

정리하자면 0~9중에 i != num인 값을 더해준다는 뜻이다.