입력 조건
- 첫째 줄에 N(2 <= N <= 1,000), M(1 <= M <= 10,000), K(1 <= K <= 10,000)의 자연수가 주어지며, 각 자연수는 공백으로 구분한다.
- 둘째 줄에 N개의 자연수가 주어진다. 각 자연수는 공백으로 구분한다. 단, 각각의 자연수는 1 이상 10,000 이하의 수로 주어진다.
- 입력으로 주어지는 K는 항상 M보다 작거나 같다.
출력 조건
- 첫째 줄에 동빈이의 큰 수의 법칙에 따라 더해진 답을 출력한다.
나의 풀이
def solution():
N, M ,K = map(int, input().split())
data = map(int, input().split())
# 데이터 오름차순 정렬
data = sorted(data)
max_num = data[-1]
second_num = data[-2]
a = M // (K+1)
b = M % (K+1)
if M <= K:
answer = max_num * K
else:
answer = a*(max_num * K + second_num)+ b*second_num
return answer
print(solution())
여기에서 data.sort()와 sorted(data)의 차이를 알아보자.
data.sort()
- list에만 적용 가능하다
- data 자체를 바꾼다(즉 in-place)
- None을 반환한다. 즉 data = data.sort()라고 쓸 수 없다.
sorted(data)
- 원래의 리스트를 변경하지 않고, 정렬된 새로운 리스트를 반환
- 리스트 뿐 아니라, 튜플 , 딕셔너리, 문자열 등에 모두 사용할 수 있다.
책의 풀이
N, M ,K = map(int, input().split())
data = list(map(int, input().split()))
# 데이터 오름차순 정렬
data.sort()
first = data[-1]
second = data[-2]
result = 0
while True:
for i in range(K): # 가장 큰 수를 K번 더하기
if M == 0:
break
result = result + first
M = M -1
if M == 0:
break
result = result + second
M = M -1
'Python > 코딩테스트' 카테고리의 다른 글
| [이코테 3-4] 1이 될 때까지 (0) | 2024.06.29 |
|---|---|
| [이코테 3-3] 숫자 카드 게임 (0) | 2024.06.29 |
| [프로그래머스 / 파이썬] LV2. 기능개발(스택/ 큐) (0) | 2024.06.28 |
| [프로그래머스 / 파이썬] LV2. 올바른 함수(스택/ 큐) (0) | 2024.06.28 |
| [이코테] 5장 재귀함수 (0) | 2024.06.26 |