코딩테스트

[ 프로그래머스 ] 두 개 뽑아서 더하기

Adose 2025. 2. 4. 16:45

📘요구 사항 정리

  • 정수 배열 numbers가 주어진다.
  • numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 오름차순 정렬 후 return

 

📌 제약 조건

  • numbers의 길이는 2 이상 100 이하
    • numbers의 모든 수는 0 이상 100 이하

 

📌 문제 분석

  • numbers의 배열이 존재할때 i + (i+1) 이런식으로 계속 더할 수 있게 for문을 사용하면 될 것 같다
  • for문을 사용해서 i + (i+1)를 사용하게 된다면, 중복 값이 발생할 것이니 return 할때 중복을 제거해야 한다.

 

📌 구현코드

package pra.lv1.두개뽑아서더하기;

import java.util.ArrayList;

public class answer_1 {
    public static void main(String[] args) {
        int [] arr = {2,1,3,4,1};

        arr= solution(arr);

    for(int i=0;i<arr.length;i++){
        System.out.print(arr[i] + " ");
    }
    }

    public static int [] solution(int [] arr){
        ArrayList<Integer> result = new ArrayList<>();

        for(int i=0;i<arr.length-1;i++){
            for(int j=i+1;j<arr.length;j++){
                result.add(arr[i]+arr[j]);
            }
        }

        return result.stream().distinct().sorted().mapToInt(Integer::intValue).toArray();
    }

}

 

📌 구현코드 해설

  • 2중 for문을 사용하여 i+ (i+1)을 할 수 있게 해준다.
  • 첫번째 for문을 0에서 시작하여 i<arr.length-1 까지 돌 수 있게 해주었다.
  • 두번째 for문은 전체 값을 다 더해주어야 하기 때문에 i<arr.length 까지 돌 수 있게 하였다.
  • 위 같이 for문을 작성하면 1 2 3 4 배열이 있을때
    • 1 + 2, 1+ 3, 1+ 4
    • 2 + 3, 2 +4
    • 3 + 4
    • 이렇게 도는걸 확인할 수 있다.
  • 하지만 이렇게 돌게 되면 중복 값이 발생한다.
  • 때문에 strema의 distinct를 사용한 후 , sorted를 사용하여 오름차순 정렬을 해주었다.