코드


import java.util.*;
class K번째큰수_ {	
	public static void main(String[] args){
		int[] arr = new Random().ints(100, 1, 101)
		            .toArray();
		
		int k = 4; //번째 큰수
		int n = arr.length;
		int count =0;
		
		// 역순 정렬을 위해 직접 Comparator 구현
		TreeSet<Integer> set = new TreeSet<>((a,b)->Integer.compare(b, a));
		
		for(int i = 0;i<n;i++) {
			for(int j=i+1;j<n;j++) {
				for(int z=j+1;z<n;z++) {
					set.add(arr[i]+arr[j]+arr[z]);
					count++;
				}
			}
		}
		//사이즈를 넘어선 k는 예외발생
		if(set.size()<k) {
			System.out.println("-1 not found");
		}
		int cnt = 1;
		int sum = 0;
		
		for(Iterator<Integer> it = set.iterator();it.hasNext() ;cnt++) {
			sum = it.next();
			System.out.print(sum+",");
			if(cnt==k) {
				System.out.println("\n"+k+"번째 큰 수 : "+ sum);;
				break;
			}
		}
		System.out.println("경우의 수 : " +count);
	}
}

결과

292,291,290,289,
4번째 큰 수 : 289
경우의 수 : 161700

List를 써서 해도 되지만, 해시가 더 빠르다.

'자료구조&알고리즘 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비' 카테고리의 다른 글

후위연산  (0) 2022.12.01
모든 아나그램 찾기  (0) 2022.11.30
연속된 자연수의 합  (0) 2022.11.25
연속부분수열  (0) 2022.11.23
교집합  (0) 2022.11.20

+ Recent posts