여기서 큰 수의 법칙이란 다양한 수로 이뤄진 배열이 있을 때 주어진 수들을 M번 더해 가장 큰 수를 만드는 법칙
단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과할 수는 없음
첫째 줄에 N(2<=N<=1000), M(1<=M<=10000), K(1<=K<=10000)의 자연수가 주어지며 각 자연수는 공백으로 구분
둘째줄에 N개의 자연수가 주어짐. 각 자연수는 공백으로 구분. 단, 각각의 자연수는 1이상 10000이하의 수로 주어짐
입력으로 주어지는 K는 항상 M보다 작거나 같다.
첫째 줄에 큰 수의 법칙에 따라 더해진 답을 출력
5 8 3
2 4 5 4 6
46
# M : 다양한 수로 이루어진 배열이 있을 때,
주어진 수들을 M번 더하여 가장 큰 수를 만드는 만드는 방법
(단, 배열의 특정한 인덱스에 해당하는 수가
연속해서 K번 초과하여 더해질 수 없다.)
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
first = data[n-1] # 가장 큰 수
second = data[n-2] # 두 번째로 큰 수
# n : 배열의 크기
result = 0
# m : 숫자가 더해지는 횟수
# k : k가 주어질 때의 결과
while True:
for i in range(k):
if m == 0:
break
result += first
m -= 1
if m == 0:
break
result += second
m -= 1
print(result)
#다른 풀이(한번에 이해가 가지 않음...)
n, m, k = map(int, input().split())
data = list(map(int, input().split())
data.sort
first = data[n-1]
second = data[n-2]
count = int(m/(k+1))*K
count += m%(k+1)
result = 0
result += (count) * first
result += (m-count)*second
print(result)
추가설명) 우리 문제는 8,3이라 2개 행렬로 딱 떨어지는데
8이 아니라 9인 경우엔 한 개가 남아서
그걸 더해주기 위해!