문제
나동빈, 「이것이 취업을 위한 코딩테스트다 with 파이썬」, 한빛미디어, p.92 참고
풀이
- 단순 풀이 예시
n, m, k = map(int, input().split())
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):
if m == 0:
break
result += first
m -= 1
if m == 0:
break
result += second
m -= 1
print(result)
- 반복되는 수열 활용 풀이
=> 수열의 길이 = (k + 1), 수열이 반복되는 횟수 = m / (k + 1), 가장 큰 수가 등장하는 횟수 = 수열 반복되는 횟수 * k
+ m이 (k + 1)로 나누어 떨어지지 않는 경우 고려 (나머지만큼 가장 큰 수가 추가로 더해짐)
즉, 가장 큰 수가 더해지는 횟수 = int(m / (k + 1) * k + m % (k+1))
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)
'Algorithms > 이코테' 카테고리의 다른 글
[Greedy] 이코테 - 곱하기 혹은 더하기(py) (0) | 2023.07.11 |
---|---|
[Greedy] 이코테 - 모험가 길드(py) (0) | 2023.07.09 |
[Greedy] 이코테 - 1이 될 때까지(py) (0) | 2023.07.09 |
[Greedy] 이코테 - 숫자 카드 게임(py) (0) | 2023.07.09 |
[CodeUp 파이썬 기초 100제] - [기초-리스트] 바둑알 십자 뒤집기(py) (0) | 2023.07.05 |