yuns

큰 수의 법칙 본문

algorithms/#3 Greedy algorithm

큰 수의 법칙

yuuuun 2020. 11. 4. 14:38
반응형

큰 수의 법칙

첫 줄에 n, m, k을 입력으로 받는다. n은 받을 데이터의 개수, 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]

res = 0

while True:
	#가장 큰 수를 연속으로 k번 더하기
    for _ in range(k):
        if m == 0:
            break
        else:
            res += first
            m -= 1
    if m == 0:
        break
    #하나의 숫자를 연속으로 k번 더한 뒤 다른 숫자 하나를 한 번 더해주는 작업 진행
    res += second
    m -= 1

print(res)

#큰 수의 법칙
n, m, k = map(int, input().split())

data = list(map(int, input().split()))

data.sort()

 # 가장 큰 두 개의 숫자의 연속인 합으로 나타남
first = data[n - 1]
second = data[n - 2]

res = 0

#k * 연속으로 더해질 갯수 + k보다 작은 개수
numOfFirst = (m // (k+1)) * k + m % (k+1)
res = first * numOfFirst + second * (m - numOfFirst)
print(res)

반응형

'algorithms > #3 Greedy algorithm' 카테고리의 다른 글

1이 될 때까지  (0) 2020.11.04
숫자 카드 게임  (0) 2020.11.04
Comments