본문 바로가기
Algorithm/구현

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

by HANNI하니 2023. 4. 26.

사용 언어 - Python3

문제 - 과일 장수

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

정답

시간초과없이 계산 간편화하기 (정답 맞춘 여부 O)

if문으로 사과를 버리는 경우와 안버리는 경우를 따로 계산하니까, 시간초과가 떴다.

두가지 경우에서 각자 복잡한 식으로 최대이익을 계산하기 때문이다.

# 시간초과
def solution(k, m, score):
    answer = 0
    score.sort() # 사과 점수에 따라 정렬
    if len(score)%int(m) == 0: # 나누어 떨어지면, 모든 사과 포장
        for i in range(0,m+1): # 최대이익
            answer += (score[m*i])*m
        
    else: # 사과 버리는 경우
        cnt = (len(score)%int(m)) #버리는 사과 개수
        for i in range(cnt):
            score.remove(score[0]) #버리기
        #안버리는 사과들 계산
        answer = score[0]*m*(len(score)/int(m))
    
    return answer

 

위와 과정은 똑같고, 최소화했다.

먼저 버리는 사과가 있다면 remove를 해줬다.

그 후 최대이익을 한꺼번에 계산했다.

상자개수만큼 반복하면서 answer에 상자 첫번째 값*사과개수를 추가해줬다.

def solution(k, m, score):
    answer = 0
    score.sort() # 사과 점수에 따라 정렬
    cnt = (len(score)%int(m)) # 버리는 사과 개수
    if cnt >= 1:
        for i in range(cnt):# 사과 버리기
            score.remove(score[0])
    
    # 최대이익 계산
    for i in range(0,int(len(score)/int(m))): # 최대이익
        answer += (score[m*i])*m
            
    return answer

 

 

레퍼런스

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글