Algorithm/inflearn

★K번째 큰 수(TreeSet)

마닐라 2021. 9. 16. 20:34

사용법을 기억.

 

import java.util.Collections;
import java.util.Scanner;
import java.util.TreeSet;

public class Main {
    public int solution(int a, int b, int[] arr) {
        //K번째 수가 존재하지 않으면 -1를 출력
        int answer = -1;
        //★중복 제거와 정렬을 하려면 TreeSet을 이용하면됨
        TreeSet<Integer> Tset = new TreeSet<>(Collections.reverseOrder());
        //Collections.reverseOrder()은 내림차순.. 기본 값은 오름차순
        //i < a 이라고 해도 되는이유는 for문 k for문 j for문에서 거짓이 되버리니까 이렇게 해도 상관없음
        for(int i = 0; i < a; i++) {
            for(int j = i+1; j < a; j++) {
                for(int k = j+1; k < a; k++) {
                    Tset.add(arr[i]+arr[j]+arr[k]);
                }
            }
        }

//        Iterator iter = Tset.iterator();	// Iterator 사용
//        while(iter.hasNext()) {//값이 있으면 true 없으면 false
//            System.out.print(iter.next() + " ");
//        }
// 152 144 143 141 140 136 133 132 130 125 124 123 122 121 120 118 114 113 112 111 110 109 106 105 104 103 102 101 100 99 98 94 93 92 91 90 89 88 87 86 84 83 82 81 80 79 78 76 75 74 73 72 71 70 69 68 67 66 64 62 61 60 59 58 57 54 52 51 50 49 47 39 143
        int cnt = 0;
        for(int x : Tset) {
            cnt++;
            if(cnt==b) answer = x;
        }
        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);

        int a = kb.nextInt();
        int b = kb.nextInt();
        int[] arr = new int[a];

        for(int i = 0; i < a; i++) {
            arr[i] = kb.nextInt();
        }

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



    }
}

 

remove() - 특정값을 지우는 메서드

size() - 키가 몇개 있는지 확인하는 메서드

first() - 오름차순이면 최솟값을 리턴하고 내림차순이면 최댓값을 리턴

last() - first()의 반대

'Algorithm > inflearn' 카테고리의 다른 글

괄호문자제거  (0) 2021.09.17
#올바른 괄호  (0) 2021.09.17
★모든 아나그램 찾기(Hash, sliding Window : 시간복잡도 O(n))  (0) 2021.09.16
★매출액의 종류(Hash, sliding Window)  (0) 2021.09.15
★아나그램(Hash)  (0) 2021.09.15