문제
다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다.
단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없다.
예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8, K가 3이라고 가정하자.
이 경우 특정한 인덱스의 수가 연속해서 3번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는
6+6+6+5+6+6+6+5 = 46이 된다.
▶️ 입력 조건
- 첫째 줄에 N(2 <= N <= 1,000), M(1 <= M <= 10,000), K(1 <= K <= 10,000)의 자연수가 공백으로 구분하여 주어진다.
- 둘째 줄에 N개의 자연수가 주어진다. 각 자연수는 공백으로 구분한다.
- K는 항상 M보다 작거나 같다.
▶️ 출력 조건
- 첫째 줄에 큰 수의 법칙에 따라 더해진 답을 출력한다.
풀이
이 문제를 해결하기 위해서는 우선 둘째 줄에 받은 자연수 배열을 정렬한 후 가장 큰 값과 두 번째로 큰 값만 저장하면 된다.
이후에는 "가장 큰 값을 K번 두번째 값을 1번 더하는 과정"을 조건에 맞게 반복 연산 하면 된다.
# 입력 데이터 정의
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
first_num = data[-1]
second_num = data[-2]
result = 0
loop_count = k
for _ in range(m):
if loop_count == 0:
result += second_num
loop_count=k
else:
result += first_num
loop_count -= 1
print(result)
'Algorithm > Problem Solving' 카테고리의 다른 글
[Beakjoon] 1343 : 폴리오미노 - python (0) | 2025.01.24 |
---|---|
[Baekjoon] 11047 : 동전 0 - python (0) | 2025.01.23 |
[Baekjoon] 2839 : 설탕 배달 - python (1) | 2025.01.23 |
[이코테] 1이 될 때까지 - python (0) | 2025.01.23 |
[이코테] 숫자 카드 게임 - python (0) | 2025.01.23 |