동빈이의 큰 수의 법칙은 N개의 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 것이며, 연속해서 K번을 초과하여 더해질 수 없다.
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
result = 0
while True:
for i in range(k):
m -= 1
result += data[-1]
if m == 0:
break
result += data[-2]
m -= 1
if m == 0:
break
print(result)
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
count = int(m / (k + 1)) * k
count += m % (k + 1)
result = 0
result += count * data[-1]
result += (m - count) * data[-2]
print(result)
이 문제를 풀려면 가장 먼저 반복되는 수열에 대해서 파악해야한다. 반복되는 수열의 길이는 (k+1)이며, m//(k+1)이 반복되는 횟수가 된다.
이것이 취업을 위한 코딩 테스트다 with 파이썬 - 나동빈 저