n, m, k = map(int, input().split())
nums = list(map(int, input().split()))
result = 0
nums.sort(reverse = True)

for i in range(2,m+2):
    if (k+1)%i != 0 :
        result += nums[0]
    else :
        result += nums[1]

print(result)

위와 같은 방식으로 문제를 해결하였다. 

range의 시작값과 끝 값을 각각 2를 더해준 이유는 0,1은 값이 나누어 떨어져서 시작부터 작은값을 넣고 시작해서 값에 오차가 발생해버린다. 이제 정답을 보겠다.

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

위와같이 효율적으로 처리하는 것이 정답이다.

k번 for문을 통해 최고의 값만 더하고 한번은 2번째 값을 더하는 것이 핵심 원리이다.

+ Recent posts