프로그래머스 - 두개 뽑아서 더하기( 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으로 컬렉션을 정렬했을 때 실행시간이 더 줄어들었다.
왜일까?
지피티에게 물어보니 이렇게 답하였다.
- Stream.sorted() 메소드는 스트림 파이프라인의 일부로 실행되므로, 필요한 경우 파이프라인의 다른 연산과 병렬로 수행될 수 있습니다. 또한, 스트림은 'lazy' 특성을 가지고 있어 필요한 시점에만 연산을 수행하므로, 효율적인 작업이 가능합니다.
- Arrays.sort()는 전체 배열에 대한 정렬을 수행하므로, 배열의 모든 요소를 한 번에 메모리에 로드해야 합니다. 또한, 이 메서드는 병렬 처리를 지원하지 않습니다.
그러나 큰 차이가 나지는 않으므로 원하는 방식대로 하면 될 것 같다.
내림차순으로 정렬하고 싶다면
int[] answer=set.stream()
.sorted(Comparator.reverseOrder())
.mapToInt(i->i)
.toArray();
728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 프로그래머스 - 문자열 내림차순으로 배치하기(Level 1) (0) | 2024.01.22 |
|---|---|
| 프로그래머스 - H-Index (Level 2) (2) | 2024.01.22 |
| 프로그래머스 - k번째 수 (Level 1) (0) | 2024.01.20 |
| 프로그래머스 - 불량 사용자(Level 3) (0) | 2024.01.18 |
| 프로그래머스 - 소수 찾기(Level 2) (0) | 2024.01.16 |