문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
Set<Integer> numlist = new HashSet<Integer>();
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
// 두개를 뽑아서 더함
numlist.add(numbers[i] + numbers[j]);
}
}
// 리스트로 바꿈
List<Integer> list = new ArrayList(numlist);
// answer 배열에 담음
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
// 정렬
Arrays.sort(answer);
return answer;
}
}
처음부터 ArrayList를 사용하려고 했었다.
하지만 중복 검사를 하기 위해 contain을 사용해야 하는데, 이것은 모든 원소를 돌며 일일히 검사하므로 부적합.
따라서 애초부터 중복이 안되는 HashSet을 사용하였다.
(HashSet도 중복 검사를 하긴하나, List보다 효율적이다)
그리고 배열에 값을 쉽게 담기 위해 리스트로 변경했으며,
정렬은 배열의 sort() 메서드를 사용하였다.