코테 공부/그 외 사이트

[python/그리디] 큰 수의 법칙

prefer_all 2022. 8. 16. 17:57
문제

다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙. 단, 배열의 특정한 인덱스(번호)가 해당하는 수가 연속해서 K번 초과하여 더해질 수 없음

 

입출력

첫째 줄에 배열의 크기 N, 숫자가 더해지는 횟수 M, K가 주어지고 

둘째 줄에 N개의 자연수가 주어짐

예제 입력 예제 출력
5 8 3
2 4 5 4 6
46

 

풀이

내 풀이

문제 핵심: 입력된 값들 중 가장 큰 값 두 개만을 사용함

가장 큰 값 k 번 + 두 번째로 큰 값 1번 + 가장 큰 값 k 번... 이렇게 더해나감

n, m, k = map(int, input().split())  # input().split() 쓰면 map으로 int 처리
arr = list(map(int, input().split()))
arr.sort(reverse=True)
answer = 0 # return할 큰 수
num = 0 # 첫번째 인덱스 몇 번 합했는가
cnt = 0 # 지금까지 몇 개를 더했는가

while cnt < m:
    if num < k:
        answer += arr[0]
        num += 1
    else:
        answer += arr[1]
        num = 0
    cnt += 1

print(answer)