스파이더 웹 개발

K번째 큰 수 본문

알고리즘

K번째 큰 수

스파이더웹 2022. 7. 21. 22:09
728x90
반응형

 

1. 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록해야 하므로 Collection을 사용한다 

2. 기록한 값 중 k번째 큰 수를 출력하므로 Collection의 값을 정렬한다

3. 예시에서 (만약 큰 수부터....) 합한 값이 중복인 경우  중복을 제거하고 k값을 찾는 것이므로

     Collection에서 Set을 사용한다

4. 출력에서 k번째 수가 존재하지않는 경우 -1을 출력하므로 정답 answer 초기값을 -1로 지정해준다

 

import java.util.*;

public class a {

    public static int solution(int n, int k, int[] arr){
        int answer =-1;
        Set<Integer> set = new TreeSet<>(Collections.reverseOrder());

        for(int i=0; i<n; i++){
            for(int j=i+1; j<n; j++){
                for(int s=j+1; s<n; s++){
                    set.add(arr[i] + arr[j] + arr[s]);
                }
            }
        }

        int count =1;
        for(int i : set){
            if(count==k){
                answer = i;

                break;
            }
            count++;
        }

        return answer;
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int k = scan.nextInt();

        int[] arr = new int[n];
        for(int i=0; i<n; i++){
            arr[i]=scan.nextInt();
        }
        System.out.println(solution(n,k,arr));
    }
}

TreeSet 객체의 경우 정렬을 지원하므로 문제에서 중복과 정렬의 키워드를 해결하기위하여 TreeSet을 사용한다

3장의 카드의 값을 합한 값이므로 3중 for문을 이용하되, 초기값은 중복된 카드를 뽑을 수 없으므로 +1을하여 초기값을 설정해준다 이후 count를 선언하여, k번째 위치와 count의 위치가 같은 경우 해당 값을 answer에 대입한다

728x90
반응형

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

공주 구하기  (0) 2022.07.28
백준 1935 - 후위 표기식  (0) 2022.07.27
쇠막대기 - Stack  (0) 2022.07.26
백준 2164  (0) 2022.07.22
백준 2941 - 크로아티 알파벳  (0) 2022.07.20
Comments