[이코테] 큰 수의 법칙

김도윤·2022년 10월 27일

[이코테]

목록 보기
2/8

📗 문제 설명

동빈이의 큰 수의 법칙은 N개의 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 것이며, 연속해서 K번을 초과하여 더해질 수 없다.

📍 입력 조건

  • 첫째 줄에 N(2 <= N <= 1000), M(1 <= M <=10000), K(1 <= K <= 10000)의 자연수가 주어지며, 각 자연수는 공백으로 구분한다.
  • 둘째 줄에 N개의 자연수가 주어진다. 각 자연수는 공백으로 구분한다. 단, 각각의 자연수는 1 이상 10000 이하의 수로 주어진다.
  • 입력으로 주어지는 K는 항상 M보다 작거나 같다.

📍 출력 조건

  • 첫째 줄에 동빈이의 큰 수의 법칙에 따라 더해진 답을 출력한다.

📍 내 코드

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

data.sort()
result = 0

while True:
    for i in range(k):
        m -= 1
        result += data[-1]
        if m == 0:
            break
    result += data[-2]
    m -= 1
    if m == 0:
        break

print(result)

📍 답안 코드

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

count = int(m / (k + 1)) * k
count += m % (k + 1)

result = 0
result += count * data[-1]
result += (m - count) * data[-2]

print(result)

이 문제를 풀려면 가장 먼저 반복되는 수열에 대해서 파악해야한다. 반복되는 수열의 길이는 (k+1)이며, m//(k+1)이 반복되는 횟수가 된다.

📌 Reference

이것이 취업을 위한 코딩 테스트다 with 파이썬 - 나동빈 저

0개의 댓글