1. 문제
2. 문제 해결 논리
1. 문제 이해
- 주어진 것
- int[] numbers // 임의의 자연수 배열
- 요구되는 것
- int[] answer // 두 수의 합으로 나올 수 있는 모든 경우를 담은 배열(중복 X)
2. 데이터 구조 결정
- 방법1. 중복 없이, 정렬없이 데이터를 저장하는 HashSet 이용
- 방법2. 중복 없이, 오름차순 정렬을 유지하며 데이터를 저장하는 TreeSet 이용
3. 알고리즘 설계
3-1. HashSet 이용 시
- 반복문을 통해 HashSet에 두 수의 합으로 나오는 모든 경우를 저장
- 반복문을 통해 int[] 배열로 변환
- Arrays.sort를 이용한 배열 정렬
3-2. TreeSet 이용시
- 반복문을 통해 TreeSet에 두 수의 합으로 나오는 모든 경우를 저장
- Iterator를 통해 int[] 배열로 변환
3. 코드 구현
3-1. HashSet 이용
import java.util.Arrays;
import java.util.HashSet;
class Solution {
public int[] solution(int[] numbers) {
HashSet<Integer> sumSet = new HashSet<>();
//반복문을 통해 각 원소들의 합을 HashSet에 저장
//중복 없음, 정렬 없음
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
sumSet.add(numbers[i] + numbers[j]);
}
}
//HashSet의 크기만큼의 int 배열 생성
int[] answer = new int[sumSet.size()];
//HashSet을 순회하며 int 배열에 저장
int idx = 0;
for (Integer value : sumSet) {
answer[idx++] = value;
}
//int 배열 정렬
Arrays.sort(answer);
return answer;
}
}
3-2. TreeSet 이용
import java.util.TreeSet;
import java.util.Iterator;
class Solution {
public int[] solution(int[] numbers) {
TreeSet<Integer> sumSet = new TreeSet<>();
//반복문을 통해 각 원소들의 합을 TreeSet에 저장
//중복 없음, 오름차순 정렬 유지
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
sumSet.add(numbers[i] + numbers[j]);
}
}
//HashSet 사이즈만큼 int 배열 생성
int[] answer = new int[sumSet.size()];
//Interator를 통해 HashSet 순회하며 int 배열에 저장
int idx = 0;
Iterator<Integer> iterator = sumSet.iterator();
while (iterator.hasNext()) {
answer[idx++] = iterator.next();
}
//정렬할 필요없이 바로 반환
return answer;
}
}
* Reference
https://school.programmers.co.kr/learn/courses/30/lessons/68644
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
'PS > Programmers' 카테고리의 다른 글
[level1, for문] 콜라 문제 (0) | 2023.05.15 |
---|---|
[level1, HashMap] 달리기 경주 (0) | 2023.05.10 |
[level1, 배열/정렬] K번째수 (0) | 2023.03.29 |
[level1, 비트 연산] [1차] 비밀지도 (0) | 2023.03.27 |
[level1, Arrays] 삼총사 (0) | 2023.03.26 |