본문 바로가기
알고리즘/프로그래머스 풀이

[JAVA] 프로그래머스 - 두 개 뽑아서 더하기

by krapoi 2021. 11. 18.
반응형

이번에 푼 문제는 두 개 뽑아서 더하기이다.

 

문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

 

더해서 나오는 수를 다 구하라는 듯하다. (자기 자신과는 더하기 X)

 

제한사항

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

또한 중복 값도 들어가면 안 된다.

그럼 이제 코드를 보자

import java.util.HashSet;
import java.util.Set;

class Solution {
    public int[] solution(int[] numbers) {
        Set<Integer> set = new HashSet<>();

        for(int i = 0; i < numbers.length; i++){
            for(int j = i+1; j < numbers.length; j++){
                set.add(numbers[i] + numbers[j]);
            }
        }

        return set.stream().sorted().mapToInt(Integer::intValue).toArray();
    }
}

 

중복 값이 들어가면 안 되기 때문에 Arraylist보단 Set을 선택했다.

이중 for문을 돌려서 set에 number [i]+number [j]를 해준다.

 

return을 보면 매번 return 하는 방식과는 다르다는 것을 느낄 것이다.

그 이유는 stream을 사용했기 때문이다.

stream에 대해서는 나중에 올릴 거지만 대충 말해두자면 람다식을 사용하게 하는 것이다.

일단 함수를 해석해보면 알겠지만 stream에서 정렬하며 mapToint를 사용해 값을 intValue로 바꾼다.

maptoInt에서 괄호 안에 문법이 이해가 안 될 수 있는데, 저건 Integer클래스에서 intValue함수를 참조한다는 뜻이다.

그다음 toArray로 변형해주면 int배열로 반환이 된다.

 

stream은 배워야 할게 많아서 조금 걸릴 것 같다.

반응형