본문 바로가기

문제 풀이/Programmers

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

문제 출처 - Programmers

문제는 여기

 

코딩테스트 연습 - 두 개 뽑아서 더하기

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

programmers.co.kr


[풀이]

1. 중복처리를 위해 ArrayList를 만들어준다.

2. 2중 for문을 통한 반복으로 두 수의 합을 구해준다.

3. 2. 에서 구해진 합이 contains()를 사용해 1. 에서 만든 ArrayList에 포함이 되어있는지 체크하고 없다면 넣어준다.

4. list에 담겨 있는 값들을 answer 배열에 담아준다.

5. 결과는 오름차순 정렬이 되어야 하므로 Arrays.sort()를 사용해 정렬해준다.

[접근]

1. 반복을 돌리면서 합을 구해서 중복되지 않는 값들만 구해주면 되겠다고 생각했다.

[코드]

import java.util.*;

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

		for (int i = 0; i < numbers.length; i++) {
            int sum = 0;
            
            // 0부터 돌면 똑같은 값을 계속 중복적으로 구하게 됨
            // 따라서 기준숫자 이후로 계산
			for (int j = i + 1; j < numbers.length; j++) {
				sum = numbers[i] + numbers[j];
                
                // 있는 지 체크
				if (!list.contains(sum)) {
					list.add(sum);
				}
			}
		}

		int[] answer = new int[list.size()];
        
        // 리스트에 있는 값들을 넣어주기
		for (int i = 0; i < list.size(); i++) {
			answer[i] = list.get(i);
		}

        // 오름차순 정렬
		Arrays.sort(answer);
        
        return answer;
    }
}