ALGORITHM/PROGRAMMERS

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

0298 2020. 11. 6. 23:51

programmers.co.kr/learn/courses/30/lessons/68644?language=java

 

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

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

programmers.co.kr

2020-11-06


import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;

class Solution {
	public static int len;
    public static HashSet<Integer> arr;
	public static ArrayList<Integer> q;
	public static boolean vtd[];
	public static int answer[] = {};
    public static int[] number;
    	
	public static void solve(int idx, int cnt, int sum) {
		if(cnt == 2) {
			arr.add(sum);
			return;
		}
		
		for(int i = 0; i < len; i++) {
			if(!vtd[i]) {
				vtd[i] = true;
				solve(i, cnt+1, sum+number[i]);
				vtd[i] = false;
			}
		}
	}
	
    public int[] solution(int[] numbers) {
        number = numbers;
        len = numbers.length;
		q = new ArrayList<>();
		vtd = new boolean[len];
        arr = new HashSet<Integer>();
		solve(0, 0, 0);
		q = new ArrayList<Integer>(arr);
		answer = new int[arr.size()];
        
		for(int i = 0; i < arr.size(); i++) {
			answer[i] = q.get(i);
		}
		Arrays.sort(answer);   
        
        return answer;
    }
}

중복제거를 위해 HashSet을 사용했고, 정렬을 위해 Arrays.sort()를 사용했다.

깔끔한 코드인지는 잘 모르겠다