큰 수의 법칙이란 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다.
단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과해 더할 수는 없다.
입력
배열크기, 숫자 더해지는 횟수, 반복가능횟수 주어질 때 합 구하기(n,m,k)
출력
큰 수의 법칙에 따라 더해진 답
예시
순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M=8, K=3이라고 가정하자. 특정한 인덱스의 수를 연속해서 3번까지 더할 수 있으므로 큰 수의 법칙에 따라 결과는 6+6+6+5+6+6+6+5=46이 된다.
다른 예시로 3, 4, 3, 4, 3으로 이루어진 배열이 있을 때 M=7, K=2라고 가정하면, 결과는 4+4+4+4+4+4+4=28이 된다.
해결 아이디어
가장 큰 수를 k번 더하고 두번째로 큰 수를 한번 더하는 연산 반복
# 방법1
n,m,k=map(int, input().split())
data=list(map(int, input().split()))
data.sort(reverse=True)
first=data[0]
second=data[1]
result=0
while True:
for i in range(k): #k만큼 더하고
result+=first
m-=1
if m==0:
break
result+=second # 한번 더해!
m-=1
if m==0:
break
print(result)
# 숫자가 클 때 사용할 수 있는 방법2
n,m,k=map(int, input().split())
data=list(map(int, input().split()))
data.sort(reverse=True)
first=data[0]
second=data[1]
result=0
# 가장큰수가 더해지는 횟수 계산
cnt=(m/(k+1))*k
cnt+=m%(k+1)
result=0
result+=cnt*first
result+=(m-cnt)*second