My code
n,m,k = map(int,input().split())
a = list(map(int,input().split()))
a.sort()
a1 = a[n-1] #첫 번째로 큰 수
a2 = a[n-2] #두 번째로 큰 수
sum = 0
count = 0
while True:
for i in range(k):
if count==m:
break
sum += a1
count += 1
if count==m:
break
sum += a2
count += 1
print(sum)
Answer 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
print(result)
Answer 2
n,m,k = map(int,input().split())
data = list(map(int,input().split()))
data.sort()
first = data[n-1]
second = data[n-2]
count = int(m / (k + 1)) * k
count += m % (k + 1)
result = 0
result += (count) * first
result += (m - count) * second
print(result)
Code Review
-My code
큰 수의 법칙은 가장 큰 수와 두 번째로 큰 수만 알면 해결 할 수 있는 문제 입니다. 가장 큰 수를 k 번 더하고 두 번째로 큰 수를 한 번 더하는 연산을 반복하면 됩니다. 따라서 sort 함수를 이용해 입력 받은 정수들을 오름차순으로 먼저 정렬해주고 n-1 번째와 n-2 번째를 각각 변수에 저장해주었습니다. 가장 큰 수를 k 번 더해주고 두 번재로 큰 수를 한 번 더해주도록 해주었고 더할 때마다 count 를 1씩 증가시켜 주어 얼만큼 더해주었는지 세주었습니다. 만약 이 카운트가 m 과 같아졌을 때 반복문을 빠져나와 지금까지 더한 결과 sum 을 출력해주도록 해주었습니다.
*맨 처음 반복문의 위치를 count 연산 아래에 해주었는데 그렇게 하면 반복문을 빠져나가지 못하고 무한 루프를 돌게 되어 문제가 발생하였습니다.*
'나동빈 with 파이썬 > 실전문제 풀이' 카테고리의 다른 글
[Ch.5 - DFS/BFS] 음료수 얼려 먹기 (0) | 2022.02.10 |
---|---|
[Ch.4 - 구현] 게임 개발 (0) | 2022.02.09 |
[Ch.4 - 구현] 왕실의 나이트 (0) | 2022.02.05 |
[Ch.3 - 그리디] 1이 될 때까지 (0) | 2022.01.28 |
[Ch.3 - 그리디] 숫자 카드 게임 (0) | 2022.01.28 |
댓글