프로그래머스 - 두개 뽑아서 더하기( Level 1)

2024. 1. 20. 18:05코딩테스트 정리(자바)

728x90

코드

 

import java.util.*;
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++){
                int ad=numbers[i]+numbers[j];
                set.add(ad);
            }
        }
        int[] answer=set.stream()
                .sorted()
                .mapToInt(i->i)
                .toArray();

        return answer;
    }
}

 


 

 

1. String 타입의 컬렉션을 배열로 변환할 때는 toArray()를 사용하면 변환할 수 있다. 
하지만 int형과 같은 타입은 toArray()를 사용할 수 없다

 

해결책:

int[] answer = set.stream()
                .mapToInt(i -> i) //int형으로 변환
                .toArray();

 

 

 

2. Stream으로 컬렉션 오름차순 정렬하기

int[] answer=set.stream()
            .sorted()
            .mapToInt(i->i)
            .toArray();

 

처음엔 배열로 변환 후

Arrays.sort(answer)로 정렬을 시도했다.

그런데 이 방법보다 Stream으로 컬렉션을 정렬했을 때 실행시간이 더 줄어들었다.

왜일까?

지피티에게 물어보니 이렇게 답하였다.

  1. Stream.sorted() 메소드는 스트림 파이프라인의 일부로 실행되므로, 필요한 경우 파이프라인의 다른 연산과 병렬로 수행될 수 있습니다. 또한, 스트림은 'lazy' 특성을 가지고 있어 필요한 시점에만 연산을 수행하므로, 효율적인 작업이 가능합니다.
  2. Arrays.sort()는 전체 배열에 대한 정렬을 수행하므로, 배열의 모든 요소를 한 번에 메모리에 로드해야 합니다. 또한, 이 메서드는 병렬 처리를 지원하지 않습니다.

그러나 큰 차이가 나지는 않으므로 원하는 방식대로 하면 될 것 같다.

 

 

내림차순으로 정렬하고 싶다면

int[] answer=set.stream()
                .sorted(Comparator.reverseOrder())
                .mapToInt(i->i)
                .toArray();

 

728x90