QA/QC 내일 배움 캠프 24일차

방귀현·2026년 4월 9일

1. 코드카타.

1. 과일 장수(코드카타:56)


이번 코드카타 문제는 과일 장수이다. 과일에는 등급이 존재하며 상자에 m개의 과일을 담을 경우 상자에 담긴 사과중 등급이 가장 낮은 사과의 등급* m(상자에 담긴 사과 수)를 모두 합한 값을 구하면 된다.

  • 첫 번째 코드
def solution(k, m, score):
    c=0
    while len(score)>=m:
        a=[]
        for i in range(m):
            a.append(score.pop(score.index(max(score))))
        c+=min(a)*m
    return c

처음 만든 코드는 반복문을 사용하여 len(score)>=m일때는 계속 상자에 사과를 담도록 코드를 작성하였다. 이때 a라는 새로운 리스트는 기존 Score로 부터 가장 큰 가져오면서 score에 해당 값을 제거하는 구조로 작성하였다. 그러나 해당 방식으로 돌릴 경우 값이 커졌을 때 시간이 너무 오래걸리는 문제가 발생했다.

이에 코드를 한번 다시 본결과 아래와 같이 반복된다는 것을 알 수 있었다
1. 가장 큰 사과 찾기
2. 그 사과 위치 다시 찾기
3. 꺼내면서 남은 사과들 자리 당기기
이러한 과정으로 인해 score의 값이 클 경우 오래 걸린다는 것을 알 수 있었다.

  • 두 번째 코드
def solution(k, m, score):
    c=0
    a=[]
    score.sort(reverse=True)
    for i in range(len(score)//m):
        a=score[0+(i*m):m+(i*m)]
        c+=min(a)*m
    return(c)

그래서 이번에는 score에 있는 값을 sort(reverse=True)를 활용해 내림차순을 만든 다음 진행해 보았다. 그리고 값을 가져올 때는 a=score[0+(im):m+(im)]로 m까지의 값을 가져오고 i번째 마다 m만큼 이동후 다음 값을 가져오는 식을 만들어 보았다.

def solution(k, m, score):
    c=0
    score.sort(reverse=True)
    
    for i in range(len(score)//m):
        c+=min(score[0+(i*m):m+(i*m)])*m
    return(c)

위와 같이 할 경우 코드를 한줄 더 줄일 수 있다.

profile
QA/QC 전문가를 목표로!

0개의 댓글