[Java] 두 개 뽑아서 더하기

2025. 2. 13. 09:57·CodingTest/[프로그래머스] 자바
목차
  1. 문제 접근 방식
  2. 🔍 코드 분석

문제 설명

정수 배열 numbers가 주어집니다.

numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서

만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • numbers의 길이는 2 이상 100 이하입니다
  • numbers의 모든 수는 0 이상 100 이하입니다.

 

입출력 예

numbersresult

numbers result
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

 

입출력 예 설명

입출력 예

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.

 

 

 


 

 

 

문제 접근 방식

문제 요구사항
입력 : 정수 배열 numbers
출력 : 배열 내 서로 다른 두 인덱스의 수를 더한 모든 합을 중복 없이 오름차순으로 정렬한 정수 배열
조건 : 중복되는 합이 존재할 경우 한 번만 기록해야 하며, 오름차순 정렬을 통해 결과를 반환해야 합니다.

 

문제 해결을 위해 , 배열 내 가능한 두 수의 조합에 대해 합을 구해야 합니다.

이 과정에서 중복 제거는 필수적입니다.

따라서 중첩 for문을 사용하여 i번째 수와 j번째 수의 합을 구하고, j는 i다음 인덱스로 지정하여 중복 계산을 방지합니다.

 

또한, 중복된 합을 제거하기 위해 HashSet의 집합 자료구조를 활용합니다.

집합은 데이터의 중복 저장을 방지하기 때문에 합산 결과를 저장할 때 유용합니다.

 

결과 값은 오름차순 정렬을 요구하기 때문에, 집합에 저장된 값들을 정렬하여, 배열로 변환하여야 한다.

 

 

 


 

 

 

🔍 코드 분석

import java.util.*;
import java.util.stream.*;
class Solution {
public int[] solution(int[] numbers) {
Set<Integer> sumSet = new HashSet<>();
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
sumSet.add(numbers[i] + numbers[j]);
}
}
// 스트림을 사용하여 정렬 후 int 배열로 변환
return sumSet.stream()
.sorted()
.mapToInt(Integer::intValue)
.toArray();
}
}

 

1️⃣ 집합(HashSet)을 활용한 중복 제거

Set<Integer> sumSet = new HashSet<>();

두 수의 합을 저장할 집합을 생성합니다.

집합 자료구조는 데이터의 중복을 자동으로 제거하기 때문에,

두 수의 합이 동일한 경우에도 하나의 값만 저장됩니다.

 

2️⃣ 중첩 반복문을 통한 모든 조합 탐색

for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
sumSet.add(numbers[i] + numbers[j]);
}
}

이중 for문을 활용하여 배열의 가능한 모든 두 수의 조합을 탐색합니다.

내부 for문에서 j = i + 1부터 시작하여 (i + j)와 (j + i)가 중복 되는 것을 방지합니다.

 

3️⃣ stream을 이용하여 집합을 리스트로 변환

return sumSet.stream()
.sorted()
.mapToInt(Integer::intValue)
.toArray();
  • sumSet.stream() HashSet에 저장된 값을 스트림으로 변환합니다.
  • sorted() 기본 정렬 기준(오름차순)에 따라 정렬합니다.
  • mapToInt(Integer::intValue) 각 객체를 기본 자료형 int로 매핑합니다.
  • toArray() 최종적으로 int 배열로 변환하여 반환합니다.

 

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)
  1. 문제 접근 방식
  2. 🔍 코드 분석
'CodingTest/[프로그래머스] 자바' 카테고리의 다른 글
  • [Java] 푸드 파이트 대회
  • [Java] 가장 가까운 같은 글자
  • [Java] K번째수
  • [Java] 문자열 내 마음대로 정렬하기
leonie.
leonie.
  • leonie.
    leveloper
    leonie.
  • 글쓰기 관리
    • 분류 전체보기 N
      • Language
        • Java
      • Git
      • CS
      • CodingTest
        • [프로그래머스] 자바
      • Framework
        • Spring
      • Information
      • DBMS
        • Redis
        • SQL
      • AWS
      • OS
        • Mac
      • 자격증 N
        • 정보처리기사 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    정처기필기
    springboot
    코딩테스트
    정처기
    프로그래머스
    자바
    정보처리기사
    알고리즘
    Java
    스프링
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
leonie.
[Java] 두 개 뽑아서 더하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.