dongok218 2025. 4. 3. 20:34

<단순하게 푸는 답안>

#큰수의 법칙
n, m, k = map(int, input().split())
data = list(map(int, input().split()))

data.sort()
first = data[n-1]
second = data[n-2]

result=0

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를 공백으로 구분하여 입력받기
n, m, k = map(int, input().split())
# N개의 수를 공백으로 구분하여 입력받기
data = list(map(int, input().split()))

data.sort()
first = data[n-1]
second = data[n-2]

#가장 큰 수가 더해지는 횟수 계산
count = int(m/(k+1)) * k #가장 큰수가 등장한 횟수-> (수열의 반복횟수) x k
count += m % (k+1) #가장 큰 수가 등장했을때 나누어떨어지지 않을경우 나머지 합산

result = 0
result += (count) * first
result += (m-count) * second

print(result)