코딩테스트
[Java] 프로그래머스 두 개 뽑아서 더하기
mingg123
2021. 2. 6. 17:34
1. Set 을 만들어서 중복된 값을 저장하지 않도록 하고
2. List로 변환 후 오름차순 정렬
3. int [] 로 Return
import java.util.HashSet;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = {};
HashSet<Integer> set = new HashSet<Integer>();
for(int i = 0; i< numbers.length; i++) {
for(int j = 0; j<numbers.length; j++) {
if(i!= j) {
set.add(numbers[i]+numbers[j]);
}
}
}
List<Integer> list = new ArrayList<>(set);
Collections.sort(list);
return list.stream().mapToInt(Integer::intValue).toArray();
// return list.toArray();
}
}
다른사람 풀이를 보니 더 좋은 방법이 Set을 바로 Sort하여 return한 경우를 봄
set.stream().sorted().mapToInt(Integer::intValue).toArray(); 이런식으로.
그리고 댓글보니까 TreeSet을 사용하면 add하면서 정렬도 같이 된다함.
맞는다에 초점을 맞추는 게 아니라 최대한 효율적으로 짤 수 있도록 해야할듯.
TreeSet을 보니 이진 검색 트리의 형태로 정렬, 검색에 뛰어난 성능을 보임.
import java.util.TreeSet;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = {};
TreeSet<Integer> set = new TreeSet<Integer>();
for(int i = 0; i< numbers.length; i++) {
for(int j = 0; j<numbers.length; j++) {
if(i!= j) {
set.add(numbers[i]+numbers[j]);
}
}
}
return set.stream().mapToInt(Integer::intValue).toArray();
}
}