n, m, k = map(int, input().split())
nums = list(map(int, input().split()))
result = 0
nums.sort(reverse = True)
for i in range(2,m+2):
if (k+1)%i != 0 :
result += nums[0]
else :
result += nums[1]
print(result)
위와 같은 방식으로 문제를 해결하였다.
range의 시작값과 끝 값을 각각 2를 더해준 이유는 0,1은 값이 나누어 떨어져서 시작부터 작은값을 넣고 시작해서 값에 오차가 발생해버린다. 이제 정답을 보겠다.
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
first = data[n - 1]
second = data[n - 2]
result = 0
while True:
for i in range(k):
if m == 0:
break;
result += first
m -= 1
if m == 0:
break
result += second
m -= 1
위와같이 효율적으로 처리하는 것이 정답이다.
k번 for문을 통해 최고의 값만 더하고 한번은 2번째 값을 더하는 것이 핵심 원리이다.
'알고리즘' 카테고리의 다른 글
성적이 낮은 순서로 학생 출력하기 딕셔너리 형태 정렬하기 (0) | 2021.12.19 |
---|---|
숫자 카드 게임 그리디 (0) | 2021.12.15 |
미로 탈출 - bfs (0) | 2021.12.13 |
2개의 문자열중 같은 알파벳이 있는지 찾기 해쉬 (0) | 2021.12.06 |
BFS 1325번 효율적인 해킹 (0) | 2021.12.01 |