https://github.com/ndb796/python-for-coding-test/blob/master/3/2.py
1. 해결방법
그리디 문제이다.
본인은 반복문으로 풀었지만 좀 더 효율적인 방법은 가장 큰 수와 두 번째로 큰 수밖에 사용하지 않는다는 부분을 파악해야한다.
가장 큰 수를 K번 만큼 반복하고, 다음 두 번째로 큰 수를 한번 더해주면 된다.
2. 정답코드
(1) 단순하게 푸는 방법
import sys
input = sys.stdin.readline
N, M, K = map(int, input().split())
numbers = list(map(int, input().split()))
numbers.sort(reverse=True)
answer = 0
count = 0
idx = 0
for i in range(1, M + 1):
if count == K:
idx += 1
answer += numbers[idx]
if count == K:
idx -= 1
count = 0
count += 1
print(answer)
(2) 수학적으로 푸는 방법
import sys
input = sys.stdin.readline
N, M, K = map(int, input().split())
numbers = list(map(int, input().split()))
numbers.sort(reverse=True)
answer = 0
first = numbers[0]
second = numbers[1]
count_s = (M // K)
count_f = M - count_s
print(first * count_f + second * count_s)
'Algorithm > 이코테' 카테고리의 다른 글
[이코테] 게임 개발 (0) | 2022.10.19 |
---|---|
[이코테] 숫자 카드 게임 (0) | 2022.10.18 |
[이코테] 미로 탈출 (BFS) / [BOJ] 2178. 미로 탈출 (0) | 2022.06.09 |
[이코테] 음료수 얼려 먹기 (BFS) (0) | 2022.06.09 |