그리디
현재 상황에서 지금 당장 좋은 것만 고르는 방법
5 8 3
2 4 5 6 4
46
N, M, K = map(int, input().split())
a = map(int, input().split())
lst = list(a)
lst.sort(reverse=True)
result = 0
i=0
while True:
for j in range(0, K):
if(i == M):
break
result += lst[0]
i = i+1
if(i == M):
break
result += lst[1]
i = i + 1
print(result)
둘째 줄에 입력된 자연수들을 리스트로 변환한 후 내림차순 .sort(reverse=true)
으로 정렬하였다. i를 0으로 초기화하고 무한 루프를 돌려 연산이 이루어질 때마다 i를 1씩 증가시키고 i가 M과 같은 값이 되면 무한루프를 빠져나온다. 정렬된 리스트의 첫번째값을 K번만큼 더하고 두번째값을 한 번 더하는 연산을 반복하는 것이 가장 큰 수를 만들 수 있다.
수열
순서가 있는 나열
핵심!
가장 큰 수가 더해지는 횟수를 구하고 M에서 그 횟수를 뺀만큼 두번째로 큰 수를 더한다.
N, M, K = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
first = data[-1]
second = data[-2]
count = int(M / (K + 1)) * K
count += M % (K + 1)
result = 0
result = first * count
result += second * (M - count)
print(result)
.sort(reverse=true)
를 사용하지 않고 오름차순인 .sort() 후 data[-1] 과 같은 방식으로 가장 큰 수를 바로 찾을 수 있다.