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()를 사용했다.
깔끔한 코드인지는 잘 모르겠다