[프로그래머스] Lv1 - 과일 장수

김멉덥·2023년 7월 18일
0

알고리즘 공부

목록 보기
57/171
post-thumbnail

문제

프로그래머스 연습문제


코드 구현

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번째 인덱스부터 채울 준비를 한다.

What I learned

이걸 한줄로 짤 수 있었다.

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]
profile
데굴데굴 뚝딱뚝딱 개발기록

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

좋은 글 감사합니다!

답글 달기