반응형
문제 링크
코딩테스트 연습 - 두 개 뽑아서 더하기 | 프로그래머스 (programmers.co.kr)
문제 이해하기
배열 numbers에 있는 수의 1vs1 덧셈조합을 찾는 문제입니다.
단,
중복이 없어야 하니 Set
을 사용하면 쉽게 풀 수 있을 거라 생각했고
그 중에서도 TreeSet
을 이용하면 정렬까지 되니까
문제 풀이
코드 1
public int[] solution(int[] numbers) {
Set<Integer> set = new TreeSet<Integer>();
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();
}
오랜만에 오류 없이 한 번에 푼 문제였어요.
근데 처리속도가 너무 마음에 안 들더라구요...
테스트 케이스 처리속도
- 🔥 평균 3.5ms / 최대 4.69ms
코드 2
public int[] solution(int[] numbers) {
Set<Integer> set = new TreeSet<Integer>();
for(int i=0; i<numbers.length; i++) {
for(int j=i+1; j<numbers.length; j++) {
set.add(numbers[i] + numbers[j]);
}
}
int[] answer = new int[set.size()];
Iterator<Integer> iter = set.iterator();
int i = 0;
while(iter.hasNext()) {
answer[i++] = iter.next();
}
return answer;
}
풀이1에서 반환하는 부분만 stream을 제거하고 iterator를 사용했어요.
풀이1에 비해서 처리속도는 2배 이상 빨라졌어요.
테스트 케이스 처리속도
- 🔥 평균 0.68ms / 최대 2.37ms
반응형
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - 3진법 뒤집기 java :: 월간 코드 챌린지 시즌1 :: 68935 (0) | 2022.07.04 |
---|---|
프로그래머스 - 예산 java :: Summer/Winter Coding(~2018) :: 12982 (0) | 2022.07.04 |
프로그래머스 - 2016년 java (0) | 2022.07.03 |
프로그래머스 - 나머지가 1이 되는 수 찾기 java :: 월간 코드 챌린지 시즌3 (0) | 2022.07.02 |
프로그래머스 - [1차] 비밀지도 java :: 2018 KAKAO BLIND RECRUITMENT (0) | 2022.07.02 |