프로그래머스 연습문제
- Lv 1. 과일 장수 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/135808
def solution(k, m, score):
answer = 0
# 한 상자에 m개씩 포장 -> 최저점(p) * m 이 한상자 가격
# k가 최고점
box = [0 for _ in range(m)]
score.sort(reverse=True)
b = 0
for i in range(len(score)):
box[b] = score[i]
b += 1
if (b % m == 0):
answer += min(box) * m
b = 0
return answer
m
개의 과일밖에 담을 수 없으므로 초기에 미리 m
개의 0으로 설정해둔다.score
배열을 거꾸로 sort
해준다. (ex. [3, 3, 2, 2, 1, 1] 이런식)for
문을 통해 앞에서부터 상자에 우선 담는데, 만약 상자가 가득 찬다면 (== 상자의 인덱스가 m이라면) → 가격을 계산하여 answer
에 더해주고, 상자는 다시 0번째 인덱스부터 채울 준비를 한다.이걸 한줄로 짤 수 있었다.
def solution(k, m, score):
return sum(sorted(score)[len(score) % m :: m]) * m
여기서 배열[::m]
은 m번씩 뛰어넘으면서 요소를 가져오는 것
참고 : https://dojang.io/mod/page/view.php?id=2208
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[:7:2] # 리스트의 처음부터 인덱스를 2씩 증가시키면서 인덱스 6까지 가져옴
[0, 20, 40, 60]
>>> a[7::2] # 인덱스 7부터 2씩 증가시키면서 리스트의 마지막 요소까지 가져옴
[70, 90]
>>> a[::2] # 리스트 전체에서 인덱스 0부터 2씩 증가시키면서 요소를 가져옴
[0, 20, 40, 60, 80]
>>> a[::-1] # 리스트를 역순으로 전체 가져오기
[90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
좋은 글 감사합니다!