알고리즘/그리디(Greedy)
[JAVA] 이.코.테(Greedy) - 큰수의 법칙
728x90
반응형
Q1) 큰 수의 법칙
velmash는 큰 수의 법칙을 본인만의 방식으로 다르게 사용하고 있다. velmash의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰수를 만드는 법칙이다. 단 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다.
예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자. 이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6+6+6+5+6+6+6+5인 46이 된다.
# 문제
배열의 크기 N, 숫자가 더해지는 횟수 M, 그리고 K가 주어질 때 velmash의 큰 수의 법칙에 따른 결과를 출력하시오
# 입력 조건
- 첫째 줄에 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
풀이
public class LargeNumberRule {
public static int rule(int n, int m, int k, int arr[]) {
int first = 0; // 제일 큰수
int second = 0;/// 두번째로 큰수
Arrays.sort(arr); // 배열 오름차순 정렬
first = arr[n - 1];
second = arr[n - 2];
int sum = 0;
int temp = 0; ///최대값 반복 횟수
for (int i = 0; i < m; i++, temp++) {
if (temp >= k) { ///최대값 반복횟수가 k이상이면
sum += second; ///두번째로 큰 값을 더한후
temp = 0; ////반복횟수 0으로 초기화
continue;
}
sum += first;
}
return sum;
}
출력 : 46
아이디어 : 가장 큰 수와 두번째로 큰 수만 구하면 풀 수 있을것이라고 생각 했습니다.
배열을 오름차순으로 정렬시키고 가장 큰 수와 두번째로 큰 수를 구했고,
최대값 반복횟수에 따라 값을 더해주었습니다.
728x90
반응형
'알고리즘 > 그리디(Greedy)' 카테고리의 다른 글
[JAVA] 이.코.테 (Greedy) - 1이 될 때까지 (0) | 2021.07.30 |
---|---|
[JAVA] 이.코.테(Greedy) - 숫자 카드 게임 (0) | 2021.07.30 |
[JAVA] 그리디 알고리즘(Greedy)의 개념 (0) | 2021.07.29 |
댓글