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

Park Suyong·2021년 11월 5일
0

개인 알고리즘

목록 보기
11/19

문제

  • 문제 설명

    정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

  • 제한 사항
    • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.
  • 입출력 예시
    numbers result
    [2,1,3,4,1] [2,3,4,5,6,7]
    [5,0,2,7] [2,5,7,9,12]

문제 풀이

이 문제는 조금 생각해 보면 간단하다.

먼저, numbers 배열을 반복문 2번으로 순회하면서 i 번째 인덱스를 고정시켜 두고 i + n 번째 인덱스를 더해 가며 이전에 더했던 값과 같은지만 검사하면 된다.

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        ArrayList<Integer> array = new ArrayList<>();

        int sum = 0;
        for(int i = 0; i < numbers.length - 1; i++) 
            for(int j = i + 1; j < numbers.length; j++) {
                sum = numbers[i] + numbers[j];
                if(!array.contains(sum))
                    array.add(sum);
                sum = 0;
            }
        
        int[] answer = new int[array.size()];
        for(int i = 0; i < array.size(); i++) 
            answer[i] = array.get(i);
        
        Arrays.sort(answer);
        return answer;
    }
}

위 코드를 보면, 중복 검사를 편하게 하기 위해 Arraylist를 사용했다. contains() 메소드를 사용해 검사한 모습이다. 물론, 중복을 허용하지 않는 HashSet을 사용해도 된다. 하지만 최종적인 정답의 정렬을 위해 Arraylist를 다시 사용해야 하므로 굳이 이 방식을 택하지는 않았다.

profile
Android Developer

0개의 댓글