728x90
반응형
# 큰 수의 법칙
# 주어진 수들을 M번 더해서 가장 큰 수를 만든다.
# 해당하는 수가 연속해서K번을 초과해 더해질 수는 없다.

# N, M , K 순서대로 공백 구분해서 입력받기
n, m, k = map(int, input().split())

# N개의 수 공백으로 구분해 입력받기
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번 더하기
        if m == 0: # m이 0이라면 종료
            break 
        result += first
        m -= 1 # 더할 때마다 1씩 
    if m == 0:
        break
    result += second # 두 번째로 큰 수 더하기
    m -= 1
    
print(result)

 

 

알고리즘 참고 

# -*- coding: utf-8 -*-
"""
Created on Wed Mar 10 09:08:27 2021

@author: as_th
"""

# 큰 수의 법칙
# 주어진 수들을 M번 더해서 가장 큰 수를 만든다.
# 해당하는 수가 연속해서K번을 초과해 더해질 수는 없다.

# N, M , K 순서대로 공백 구분해서 입력받기
n, m, k = map(int, input().split())

# N개의 수 공백으로 구분해 입력받기
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번 더하기
#         if m == 0: # m이 0이라면 종료
#             break 
#         result += first
#         m -= 1 # 더할 때마다 1씩 
#     if m == 0:
#         break
#     result += second # 두 번째로 큰 수 더하기
#     m -= 1
#     
# =============================================================================

count = int(m/(k+1))*k # 가장 큰 수 더함
count += m %(k+1) # 나누어 떨어지지 않는 경우 

result += (count) * first # 가장 큰 수 더하기
result += (m-count) * second  # 두 번째로 큰 수 더하기

print(result)

[그림1] 결과

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기