문제
- N의 길이 만큼 숫자 배열
- M만큼 숫자 배열의 숫자를 더함
- 숫자는 반복 할 수 있으나, K만큼 연속적으로 반복 가능
- 가장 큰 수 찾기
예시)
N=5, M=8, K=3
list = [2, 4, 5, 4, 6] 일 때,
6 + 6 + 6 + 5 + 6 + 6 + 6 + 5를 더해 가장 큰 수인 46을 만들 수 있음
K = 3이므로 가장 큰 수인 6이 3번 반복 후 그 다음 큰 수인 5가 한 번 나옴 -> 다시 가장 큰 수인 6을 K만큼 더해줌
해설 및 코드
- 그리디로 가능
- 반복문을 통해서도 가능
- 식을 세워서 문제를 풀 수 있다.
N, M, K = map(int, input().split())
arr = list(map(int, input().split()))
arr.sort(reverse=True)
# count = 가장 큰 수가 등장하는 횟수
# 6 6 6 5 가 한 묶음이 됨
# K + 1이 한 묶음
# * K => 가장 큰 수가 등장하는 횟수
count = int( M / (K+1) ) * K
count += M % (K + 1) # 딱 떨어지지 않을 경우, 나머지 만큼 가장 큰 수가 등장
result = 0
result += count * arr[0]
result += (M-count) * arr[1] # 두 번째로 큰 숫자가 등장하는 횟수, M에서 가장 큰 수가 등장하는 횟수 빼기
print(result)
Python 문법 정리
- 나눗셈의 몫만 가져오기
count = int( M / (K+1) )
'IT > 알고리즘' 카테고리의 다른 글
[이코테] 전보.java (0) | 2021.02.28 |
---|---|
[이코테] 미래도시.java (0) | 2021.02.27 |
[백준] 책 나눠주기 9576.python (0) | 2021.02.11 |
[백준] 좌표정렬하기 11650.python (0) | 2021.02.10 |
[백준] 단어정렬 1181.python (0) | 2021.02.09 |