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

EunBi Na·2022년 3월 7일
0

큰 수의 법칙

문제

여기서 큰 수의 법칙이란 다양한 수로 이뤄진 배열이 있을 때 주어진 수들을 M번 더해 가장 큰 수를 만드는 법칙

단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과할 수는 없음

입력

첫째 줄에 N(2<=N<=1000), M(1<=M<=10000), K(1<=K<=10000)의 자연수가 주어지며 각 자연수는 공백으로 구분

둘째줄에 N개의 자연수가 주어짐. 각 자연수는 공백으로 구분. 단, 각각의 자연수는 1이상 10000이하의 수로 주어짐

입력으로 주어지는 K는 항상 M보다 작거나 같다.

출력

첫째 줄에 큰 수의 법칙에 따라 더해진 답을 출력

입력 예시

5 8 3
2 4 5 4 6

출력 예시

46

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

n, m, k = map(int, input().split())
data = list(map(int, input().split()))

data.sort()
first = data[n-1] # 가장 큰 수
second = data[n-2] # 두 번째로 큰 수
# n : 배열의 크기

result = 0

# m : 숫자가 더해지는 횟수
# k : k가 주어질 때의 결과
while True:
	for i in range(k):
		if m == 0:
        	break
        result += first
        m -= 1
     if m == 0:
     	break
     result += second
     m -= 1
     
print(result)
#다른 풀이(한번에 이해가 가지 않음...)
n, m, k = map(int, input().split())
data = list(map(int, input().split())

data.sort
first = data[n-1]
second = data[n-2]

count = int(m/(k+1))*K
count += m%(k+1)

result = 0
result += (count) * first
result += (m-count)*second

print(result)

추가설명) 우리 문제는 8,3이라 2개 행렬로 딱 떨어지는데
8이 아니라 9인 경우엔 한 개가 남아서
그걸 더해주기 위해!

profile
This is a velog that freely records the process I learn.

0개의 댓글