본문 바로가기
프로그래밍/알고리즘

파이썬 그리디 베이스 코드

by monicada 2023. 2. 7.
728x90

문제 상황

배열의 크기: 

숫자가 더해지는 횟수:  m

주어지는 입력값: k

다양한 수로 이루어진 배열에서 주어진 수들을 m번 더하여 가장 큰 수를 만들기 

입력으로 주어지는 k는 항상 m보다 작거나 같음 

 

아이디어 

입력값 중에서 가장 큰 수와 두 번째로 큰 수 저장 

'가장 큰 수를 k번 더하고, 두 번째로 큰 수를 1번 더한다'를 반복

 

해결 코드 

#n, m, k를 공백으로 구분하여 입력받기 
n, m, k = map(int, input().split())
#n개의 수를 공백으로 구분하여 입력받기 
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): #가장 큰 수를 k번 더하기 
        if m == 0: #m이 0이라면 반복문 탈출 
            break
        result += first 
        m -= 1 # 더할때마다 1씩 빼기 
    if m == 0: #m이 0이라면 반복문 탈출 
        break 
    result += second # 두 번째로 큰 수를 한 번 더하기 
    m -= 1 # 더할 때마다 1씩 빼기 
print(result) # 최종 답안 입력

 

 

 

댓글