월간 코드 챌린시 시즌 1
🔥 두 개 뽑아서 더하기 🔥
정수 배열 numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return하는 solution을 완성해보자
numbers | return |
---|---|
[2,1,3,4,1] | [2,3,4,5,6,7] |
[5,0,2,7] | [2,5,7,9,12] |
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = {};
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<numbers.length;i++){
for(int j=i+1;j<numbers.length;j++){
int sum = numbers[i] + numbers[j];
list.add(sum);
}
}
List<Integer>lists = list.stream().distinct().collect(Collectors.toList());
lists.sort(Comparator.naturalOrder());
answer = lists.stream()
.mapToInt(i -> i)
.toArray();
return answer;
}
}
리스트에서 중복되는 값들을 제거하는 것은 하나씩 반복문을 돌면서 파악하는 방법만 생각했는데 간단한 방법이 있었다.
리스트를 배열로 변환하는 부분은 한번 정리를 했는데도 왤케 기억이 안나는 건지 좀 더 많이 사용해봐야할 듯 싶다.
메모리: 79 MB, 시간: 5.64 ms
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] solution(int[] numbers) {
Set<Integer> set = new HashSet<>();
for(int i=0; i<numbers.length; i++) {
for(int j=i+1; j<numbers.length; j++) {
set.add(numbers[i] + numbers[j]);
}
}
return set.stream().sorted().mapToInt(Integer::intValue).toArray();
}
}
처음부터 Set으로 담아버리다니....
그럼 당연히 중복되는 값은 들어오지 않을꺼고 return시에 stream을 이용해서 배열로 변경해주기만 하면 끝!
메모리: 75.8 MB, 시간: 3.29 ms