import java.util.List; import java.util.ArrayList; class Solution { public int[] solution(int[] numbers) { List<Integer> num_list = new ArrayList<>(); int sum = 0; int i = 0; while(i < numbers.length) { int j = i + 1; while(j < numbers.length) { sum = numbers[i] + numbers[j]; if(num_list.size() == 0 || num_list.contains(sum) == false) num_list.add(sum); j++; } i++; } num_list.sort(null); int k = 0; int[] answer = new int[num_list.size()]; while(k < num_list.size()) { answer[k] = num_list.get(k); k++; } return answer; } }
- 정수 배열이 주어지고 그 안에 담긴 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 오름차순으로 담는 문제입니다.
- 중복된 두 수의 합은 제외하기 때문에 동적할당이 가능한 List를 사용하였습니다.
- int sum은 두 수의 합을 저장하고, 저장된 합이 num_list에 포함되어 있는지 확인할 변수입니다.
3-1. int i와 j는 numbers의 인덱스에 접근해줄 변수입니다.
3-2. 이중반복문을 사용하여 두 수를 뽑아 만들 수 있는 모든 수를 만들어주었습니다.
3-3. int j = i + 1를 해주며, int i는 고정되어 있는 상태로 모든 수에 접근해줄 것입니다.
3-4. 회차가 반복되면 i가 증가하여 그 다음 두 수를 전부 계산해줍니다.
3-5. List.contains를 사용하여 두 수의 합이 없다면 sum을 num_list에 저장하여 줍니다.- 모든 수를 List에 담았으며, 이를 오름차순으로 만들어주어야합니다.
4-1. java 8 버전부터 가능한 List.sort(null)을 사용하였습니다.
4-2.sort(null)
에서null이란 기본값
으로 사용하겠다는 뜻으로 기본값은 오름차순입니다.
4-3. 만약 내림차순으로 사용하고 싶다면sort(Comparator.reverseOrder())
을 사용하면 됩니다.- 문제에서 int[]로 반환하기를 원하기 때문에 int배열인 answer를 생성하여 num_list에 있는 값들을 복사하여주어 반환합니다.