본문 바로가기
알고리즘/JAVA

5. K번째 큰 수

by vivi 2021. 9. 22.
import java.util.*;

class Main {
	public int solution(int K, int[] arr) {
		int answer = 0;
		ArrayList<Integer> arrList = new ArrayList<>();
		int sum = 0;
		int lt = 0;

		for (int a = 0; a < arr.length - 2; a++) {
			for (int b = a + 1; b < arr.length - 1; b++) {
				for (int c = b + 1; c < arr.length; c++) {
					sum = arr[a] + arr[b] + arr[c];
					if (!arrList.contains(sum)) {
						arrList.add(sum);
					}
				}
			}
		}
		arrList.sort(null);
		if (arrList.size() - K >= 0)
			answer = arrList.get(arrList.size() - K);
		else
			answer = -1;
		return answer;
	}

	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int N = kb.nextInt();
		int K = kb.nextInt();
		int[] arr = new int[N];
		for (int i = 0; i < N; i++)
			arr[i] = kb.nextInt();
		System.out.print(T.solution(K, arr));
		kb.close();
	}
}

 

import java.util.*;

class Main {
	public int solution(int N, int K, int[] arr) {
		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 l = j + 1; l < N; l++) {
					Tset.add(arr[i] + arr[j] + arr[l]);
				}
			}
		}
		int cnt = 0;
		for (int x : Tset) {
			cnt++;
			if (cnt == K)
				return x;
		}
		return answer;
	}

	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int N = kb.nextInt();
		int K = kb.nextInt();
		int[] arr = new int[N];
		for (int i = 0; i < N; i++)
			arr[i] = kb.nextInt();
		System.out.print(T.solution(N, K, arr));
		kb.close();
	}
}

중복을 허용하지 않고 정렬을 지원하는 자료구조인 TreeSet을 사용

Set은 중복 제거에 많이 사용한다.

 

TreeSet<Integer> Tset = new TreeSet<>(Collections.reverseOrder()); // 역순정렬
Tset.first(); // first 값
Tset.last(); // last 값

기억해두깅

'알고리즘 > JAVA' 카테고리의 다른 글

2. 괄호문자제거  (0) 2021.09.22
1. 올바른 괄호  (0) 2021.09.22
1. 두 배열 합치기  (0) 2021.09.21
4. 모든 아나그램 찾기  (0) 2021.09.20
3. 매출액의 종류  (0) 2021.09.20

댓글