import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
// 큰 수의 법칙
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 배열의 크기
int m = sc.nextInt(); // 숫자가 더해지는 횟수
int k = sc.nextInt(); // k번 초과하여 더해짛 수 없다
int [] arr = new int[n];
for(int i = 0 ; i < n ; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
int first = arr[n-1];
int second = arr[n-2];
int sum = 0;
int cnt = ( m / ( k + 1 ) ) * k ;
int cnt2 = ( m % ( cnt ));
sum = (cnt * first )+ (second * cnt2);
System.out.println(sum);
}
}
(1) 큰 수의 법칙은 가장 큰 수와 두 번째 큰 수를 구하고 각각의 구해야 하는 횟수를 구해서 더하면 된다고 생각했다.
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Scanner sc = new Scanner(System.in);
// N, M, K를 공백을 기준으로 구분하여 입력 받기
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
// N개의 수를 공백을 기준으로 구분하여 입력 받기
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr); // 입력 받은 수들 정렬하기
int first = arr[n - 1]; // 가장 큰 수
int second = arr[n - 2]; // 두 번째로 큰 수
// 가장 큰 수가 더해지는 횟수 계산
int cnt = (m / (k + 1)) * k;
cnt += m % (k + 1);
int result = 0;
result += cnt * first; // 가장 큰 수 더하기
result += (m - cnt) * second; // 두 번째로 큰 수 더하기
System.out.println(result);
}
}
(1) 위 과정은 똑같았다. 근데 cnt += m % (k + 1); 이부분을 왜 해줘야하는지 생각하지 못했는데 m 이 (k+1) 로 나누어 떨어지지 않는 경우 m % (k+1) 만큼 가장 큰 수를 더해줘야하기 때문에 고려해야한다. 또한 수열에 대해서도 공부를 하자