[프로그래머스/68644] 두 개 뽑아서 더하기
in Study / Coding Test
☑️ 문제
☑️ 풀이
과정
- 두 수를 선택하는 모든 경우의 수
- 두 수를 더해서 새로운 배열에 저장 후 중복값 제거
- 오름차순 정렬 후 리턴
첫 번째 풀이 (HashSet)
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < numbers.length -1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
set.add(numbers[i] + numbers[j]);
}
}
int[] arr = new int[set.size()];
Iterator<Integer> iter = set.iterator();
int idx = 0;
while (iter.hasNext()) {
arr[idx++] = iter.next();
}
Arrays.sort(arr);
return arr;
}
}
- 먼저 HashSet을 사용해서 이중 for문으로 두 수를 더한 합의 중복을 제외한다.
- Iterator로 HashSet의 모든 원소를 배열에 추가한 후, 오름차순 정렬을 했다.
- Iterator를 쓰지 않고 for문을 사용할 수 있다.
- 여기서 Set의 Integer 타입 원소를 int 타입의 배열에 넣을 수 있는 건 자바의 auto-unboxing(오토 언박싱) 때문!
int[] arr = new int[set.size()]; int idx = 0; for (Integer i : set) { arr[idx++] = i; } Arrays.sort(arr); return arr;
Stream을 사용해서 HashSet을 오름차순 정렬 후 배열 형태로 리턴할 수도 있다.
return set.stream().sorted().mapToInt(Integer::intValue).toArray();
- Iterator를 쓰지 않고 for문을 사용할 수 있다.