[자바 알고리즘] 프로그래머스 두 개 뽑아서 더하기

2025. 11. 10. 10:28·JAVA/Java 실습

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
'JAVA/Java 실습' 카테고리의 다른 글
  • [Java] 테스트 코드 개념 정리하기 2
  • [Java] 테스트 코드 개념 정리하기
  • [JAVA Algorithm] 커머스 과제 알고리즘 기능 구현
  • [Java Algorithm] 거스름돈 문제 풀이 예시 따라가보기
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    HTML&CSS
    MVC
    경합조건과 교착상태
    Til
    jsp
    algorithm
    for문
    JPA
    WebSocket
    String.format
    BEAN
    백엔드 기초다지기
    SpringSecurity
    객체지향프로그래밍
    RestTemplate
    네트워크 기초
    Spriingboot
    다형성
    Github
    실시간 데이터 처리
    객체지향
    Spring
    백엔드 기초
    프로세스와 쓰레드
    git
    java
    Java 문법기초
    thymleaf
    웹소켓
    Stomp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[자바 알고리즘] 프로그래머스 두 개 뽑아서 더하기
상단으로

티스토리툴바