본문 바로가기
알고리즘 이전/HashMap,TreeSet

K번째 큰 수

by hoshi03 2023. 8. 7.

treeset - 중복제거용으로 많이 사용

 

1~100 사이의 자연수가 적힌 카드 중 3개를 뽑았을때 합이 k번째로 큰 값 구하기, 자연수는 중복 가능

treeset을 사용하여 중복없이 뽑을 수 있다

3중for문으로 i = 0; j = i+1, k = j+1 조건으로 해 두면 뽑는 카드는 중복이 되지 않는다!

TreeSet<Integer> tset = new TreeSet<>(Collections.reverseOrder()); - reverseOrder로 내림차순

 

 

import java.util.*;
public class Main {
    public int Solution(int a, int b, int[] arr){
        int ans = 0, cnt = 0;
        TreeSet<Integer> tset = new TreeSet<>(Collections.reverseOrder());
        for (int i = 0; i < a; i++)
            for(int j = i+1; j < a; j++){
                for (int k = j+1; k < a; k++){
                    //3개 더한 값이 중복이 되지 않게 한번에 더하기
                    tset.add(arr[i]+arr[j]+arr[k]);
                }
            }
        for(int x : tset) {
            cnt++;
            if(cnt == b){
                return x;
            }
        }
        if(b > a) ans = -1;
        return  ans;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        int[] arr = new int[a];
        for(int i = 0; i < a; i++) arr[i] = in.nextInt();

        System.out.print(T.Solution(a,b,arr));
    }
}