알고리즘
큰 수의 법칙 그리디
메밀국수가생각나
2021. 12. 14. 21:23
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번째 값을 더하는 것이 핵심 원리이다.