Self Check :
반복문 개념을 통해 새로운 배열값 저장을 할 수 있는가?
🙋♂️ 문제 분석 (문제 원문 : 두개 뽑아서 더하기)
정수 배열 numbers가 주어집니다.
numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
⚠️ 제약사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
📂 입출력 예시
#input
numbers
[2, 1, 3, 4, 1]
[5, 0, 2, 7]
#output
result
[2, 3, 4, 5, 6, 7]
[2, 5, 7, 9 , 12]
🧐 문제 풀이 접근 방법
해당 문제를 접근하며 생각이 들었던 것은 각 정수 배열 내 원소의 값을 순차적으로 순회하면서 더한 값들이 배열 내 포함되었는지를 확인하고 포함되었다면 false로 배열 내 추가하지 않고, true일 경우 배열 내 값에 추가하는 형태로 문제를 풀어가면 어떨지에 대해서 생각해보게 되었다.
👍 세부 아이디어
순회하는 방식으로는 완전탐색 형태의 접근 방식으로 접근해보고자 했다.
첫번째 배열 내 수와 나머지 배열의 수의 합을 반복순회하면서 기존 배열에 포함된 값인지를 검증하고 포함되었다면 다음 수의 합을 확인하고 아닌 경우는 배열의 새로운 수로 저장하는 형태로 접근하려 했다.
문제의 경우에는 두 수만 뽑아서 더하면 되므로 이중 반복문 형태로 접근하려 했다.
👨🏻💻 나의 코드
#My Code
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] solution(int[] numbers) {
Set<Integer> sums = new HashSet<>();
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
sums.add(numbers[i] + numbers[j]);
}
}
int[] answer = sums.stream().mapToInt(Integer::intValue).toArray();
Arrays.sort(answer);
return answer;
}
}
중복 제거를 위해 Set의 개념을 활용하게 되었다.
Set<Integer> sums = new HashSet<>();
sums.add(nums[i] + nums[j]);
- Set은 중복된 요소를 저장하지 않는 특성이 있는데 List와 비교해보자면 아래와 같았다.
| 자료구조 | 중복 허용 | 예시 | 결과 |
| List | 허용 | [3, 4, 3] | 그대로 유지 |
| Set | 불허 | [3. 4. 3] | [3, 4] 로 저장됨 |
Set은 이미 존재하는 값이라면 add()할 때 무시하게 되어 중복값을 제외시키는 개념
int 배열에 담기 위해
int[] answer = sums.stream().mapToInt(Integer::intValue).toArray();
를 사용하게 되었는데
Integer 객체를 바로 int[] 로 바꾸게 되면 오토언박싱, 박싱 문제가 생기기 때문에 순차적 변환과정으로 IntStream으로 먼저 변환 이후 변환해주는 과정
📈 시간 복잡도 분석
#Check running complication
이중 반복문 사용 : O(n²)
'JAVA > Java 실습' 카테고리의 다른 글
| [Java] 테스트 코드 개념 정리하기 2 (0) | 2025.12.11 |
|---|---|
| [Java] 테스트 코드 개념 정리하기 (0) | 2025.12.01 |
| [JAVA Algorithm] 커머스 과제 알고리즘 기능 구현 (0) | 2025.10.13 |
| [Java Algorithm] 거스름돈 문제 풀이 예시 따라가보기 (0) | 2025.09.29 |
| [JAVA 실습] 커머스 과제 (심화) (0) | 2025.09.24 |