이코테 : 큰 수의 법칙

노영진·2023년 9월 27일

코드

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

# 가장 큰 수와 두번째로 큰 수 구하기
max1 = max(data)
data.remove(max1)
max2 = max(data)

# 가장 큰 수는 m-num 번, 두번째로 큰 수는 num 번 더하도록
num = m // (k+1)
res = (m-num) * max1 + (num * max2)

print(res)

접근

주어진 숫자들을 m번 더하여 큰 수를 만드는 문제이다. 같은 숫자는 최대 k번 연속으로 더할 수 있다(중복 가능). 가장 큰 수를 만들기 위해서는 숫자들 중에서 가장 큰 수를 가장 많이 더해주어야 하고 그 사이사이에는 두 번째로 큰 수를 더해주면 된다고 생각하였다.

# 가장 큰 수와 두번째로 큰 수 구하기
max1 = max(data)
data.remove(max1)
max2 = max(data)

가장 큰 수를 구한 뒤, 리스트에서 제외시키고 다시 가장 큰 수를 구했다.

가장 큰 수 k개 이후에 두번째로 큰 수를 더해주는 것을 반복하는 것이기 때문에 k+1 개씩 반복되어 더해지게 된다.

num = m // (k+1)

k+1 개의 숫자들이 num 번 반복하기 때문에
가장 큰 수에 m - num, 두 번째로 큰 수는 num을 곱한 것을 더하여 해결하였다.

0개의 댓글