정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
numbers | result |
[2,1,3,4,1] | [2,3,4,5,6,7] |
[5,0,2,7] | [2,5,7,9,12] |
이 문제는 조금 생각해 보면 간단하다.
먼저, numbers 배열을 반복문 2번으로 순회하면서 i 번째 인덱스를 고정시켜 두고 i + n 번째 인덱스를 더해 가며 이전에 더했던 값과 같은지만 검사하면 된다.
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
ArrayList<Integer> array = new ArrayList<>();
int sum = 0;
for(int i = 0; i < numbers.length - 1; i++)
for(int j = i + 1; j < numbers.length; j++) {
sum = numbers[i] + numbers[j];
if(!array.contains(sum))
array.add(sum);
sum = 0;
}
int[] answer = new int[array.size()];
for(int i = 0; i < array.size(); i++)
answer[i] = array.get(i);
Arrays.sort(answer);
return answer;
}
}
위 코드를 보면, 중복 검사를 편하게 하기 위해 Arraylist
를 사용했다. contains() 메소드
를 사용해 검사한 모습이다. 물론, 중복을 허용하지 않는 HashSet
을 사용해도 된다. 하지만 최종적인 정답의 정렬을 위해 Arraylist
를 다시 사용해야 하므로 굳이 이 방식을 택하지는 않았다.