Set이라는 자료구조를 이용해서 중복을 제거한다.
TreeSet을 사용하면 중복을 제거하면서, 정렬까지 된다.
public int solution(int n, int k, int[] arr) {
//10 3
//13 15 34 23 45 65 33 11 26 42
int answer = -1;
TreeSet<Integer> tSet = new TreeSet<>(Collections.reverseOrder());
for(int i=0; i<n; i++) {
for(int j=i+1; j<n; j++) {
for(int p=j+1; p<n; p++) {
tSet.add(arr[i]+arr[j]+arr[p]);//이렇게 해서 3가지를 뽑는 경우의수를 모두 더한다.
}
}
}
int cnt = 0;
for(int x : tSet) {
cnt++;
if(cnt == k) {
return x;
}
}
return answer;
}
public static void main(String[] args){
Ex_0405 T = new Ex_0405();
Scanner in=new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int arr[] = new int[n];
for(int i=0; i<n; i++) {
arr[i] = in.nextInt();
}
System.out.print(T.solution(n, k, arr));
return ;
}
중복이 없어야하고, 정렬이 필요한 경우 TreeSet을 사용하면 좋다.
TreeSet을 이용하기 위한 메서드 설명
Collections.reverseOrder() 메서드를 이용하면 역순으로 정렬되어 저장할 수 있다.
value값을 넣어주면 TreeSet에 저장된 value값을 찾아서 삭제한다.
안에 들어있는 원소의 갯수를 알려준다.
오름차순인 경우 최소 값을 받고, 내림차순인 경우 최대 값을 받는다.
TreeSet에서 가장 앞에 있는 값을 받게 된다.
오름차순인 경우 최대 값을 받고, 내림차순인 경우 최소 값을 받는다.
TreeSet에서 가장 끝에 있는 값을 받게 된다.
출처 : 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비