본문 바로가기
○ 기술면접/알고리즘

그리디: 큰 수의 법칙

by ZEROMI 2023. 3. 19.
728x90

입력 조건

  • 배열의 크기 N, 숫자가 더해지는 횟수 M, K번 초과 불가
  • 첫째 줄에 N(2 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000)의 자연수가 주어지며, 각 자연수는 공백으로 구분한다.
  • 둘째 줄에 N개의 자연수가 주어진다. 각 자연수는 공백으로 구분한다. 단, 각각의 자연수는 1 이상 10,000 이하의 수로 주어진다.
  • 입력으로 주어지는 K는 항상 M보다 작거나 같다.

출력 조건

  • 첫째 줄에 큰 수의 법칙에 따라 더해진 답을 출력한다.

입력 예시

5 8 3

2 4 5 4 6

 

출력 예시

46


import java.util.Scanner;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        //N: 배열의 크기, M번 더하기 연산, 특정 인덱스 '연속' K번 초과 연산 불가
        int size = sc.nextInt();
        int count = sc.nextInt();
        int limit = sc.nextInt();
        
        //N개의 자연수
        int[] num = new int[size];
        for (int i = 0; i < size; i++) {
            num[i] = sc.nextInt();    
        }
        Arrays.sort(num);
        
        //배열 num의 가장 큰 값들을 꺼내 M번 더하되, 같은 인덱스에 대한 연속적 연산을 K번 초과할 수 없다.
        int result = 0;
        int tempLimit = 0;
        for (int i = 0; i < count; i++) {
            int idx = size - (tempLimit++ <= limit ? 1 : 2);
            result += num[idx];
            
            if (idx == size-2) {
                tempLimit = limit;
            }

        }
        
        System.out.println(result);
        
    }
    
}
728x90