K번째 큰 수

Seungmin Lim·2022년 2월 11일
0

코딩문제연습

목록 보기
38/63

문제

나의풀이

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-2; i++) {
				for(int lt=i+1; lt<n-1; lt++) {
					for(int rt=lt+1; rt<n; rt++) {
						Tset.add(arr[i]+arr[lt]+arr[rt]);
					}
				}
			}
			int cnt = 1;
			for(int x : Tset) {
				if(cnt == k) answer = x;
				cnt++;
			}
			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.println(T.solution(n,k,arr))	;
	}
	
}

++ for문의 바깥범위를 모두 n으로 해줘도 상관은없다!
j값이나, l값이 거짓이되면 자동으로 멈추기 때문..

풀이방법

3중 for문을 통해 완전탐색을 한 값을
내림차순 정렬인 TreeSet에 넣었다.
k번째 수 = count가 k일때의 값.
만약, count가 k값을 만나지 못했다면 -1;

핵심키워드

TreeSet

TreeSet은 기본적으로 오름차순(1,2,3,4...)으로 숫자를 저장한다.
Set이기 때문에 당연히 중복값은 저장하지 않는다.

TreeSet<Integer> Tset = new TreeSet<>(Collections.reverseOrder());

Collections.reverseOrder를 이용하면 내림차순으로도 정렬이 가능하다!
TreeSet은 배열이 아니기때문에 index를 사용하지 않는다.

TreeSet의 메소드

1. add(),remove() : TreeSet에 해당 값을 넣거나 제외 시킬수있다.

2. size() : 원소의 개수를 return.

3. first(),last : 가장 앞에있는 값을 return. 가장 뒤의 값을 return.

-> first() = 오름차순일시 최솟값, 내림차순일시 최대값.
-> last() = 오름차순일시 최대값, 내림차순일시 최솟값

0개의 댓글