IT/알고리즘

[이코테] 큰 수의 법칙.python

Terriermon 2021. 2. 12. 23:39

 문제

- 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