728x90
🔗 문제 링크
프로그래머스 - 두 개 뽑아서 더하기
📌 문제 개요
정수 배열 numbers에서 서로 다른 인덱스의 두 수를 선택하여 더한 값을 구하는 문제입니다.
조건:
- 같은 인덱스는 사용할 수 없음
- 중복된 결과 제거
- 오름차순 정렬 후 반환
ex :
[2,1,3,4,1]
가능한 합: 2, 3, 4, 5, 6, 7
📌접근 방법
모든 경우의 수를 확인하기 위해 이중 반복문을 사용
for(int i = 0; i < numbers.length; i++){
for(int j = i + 1; j < numbers.length; j++){
}
}
j = i + 1 부터 시작
- 자기 자신 선택 방지
- 중복 조합 제거
TreeSet을 사용하여 동시에 처리
- 중복 제거
- 오름차순 정렬
📌 핵심 아이디어
1. TreeSet 사용
TreeSet 특징:
- 중복 제거
- 자동 오름차순 정렬
- 따라서 별도의 정렬 코드가 필요 없습니다.
TreeSet<Integer> set = new TreeSet<>();
2. 두 수 조합 생성
- 모든 조합의 합을 TreeSet에 저장
set.add(numbers[i] + numbers[j]);
3. int[] 배열 변환
- stream()을 사용하여 Set → int[] 형태로 변환
return set.stream()
.mapToInt(Integer::intValue)
.toArray();
📌 전체 코드
import java.util.TreeSet;
class Solution {
public int[] solution(int[] numbers) {
TreeSet<Integer> set = new TreeSet<>();
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()
.mapToInt(Integer::intValue)
.toArray();
}
}
📄 정리
- 브루트포스 탐색
- Set 자료구조 활용
- stream 배열 변환
개념을 함께 연습할 수 있는 문제
특히 TreeSet 하나로:
- 중복 제거
- 정렬
을 동시에 처리할 수 있다는 점이 핵심
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| [프로그래머스] K번째수 JAVA 풀이 (알고리즘, 시간복잡도) (0) | 2026.05.28 |
|---|---|
| 프로그래머스 푸드 파이트 대회 JAVA 풀이 (0) | 2026.05.27 |
| 프로그래머스 시저 암호 JAVA (문자열, 구현, 아스키코드) (0) | 2026.05.25 |
| 프로그래머스 가장 가까운 같은 글자 JAVA 풀이 (해시맵, 문자열) (0) | 2026.05.24 |
| 프로그래머스 3진법 뒤집기 (JAVA) (0) | 2026.05.22 |