오랑우탄의 반란

프로그래머스 | 과일 장수 (Python3) 본문

PYTHON/프로그래머스

프로그래머스 | 과일 장수 (Python3)

5&2 2024. 7. 22. 13:29
반응형

 

오늘도 오랑이는 문제를 풉니다. 

 

과일 장수

 

풀이 과정

  • score 를 순서대로 나열
  • 개수 m 씩 쪼개고
  • 그 중 최솟값에 대해 더해서
  • m 을 곱한 값을 리턴

위의 순서대로 진행하는 코드를 생각했습니다.  

차례대로 코드를 짜봅시다. 

def solution(k, m, score):
    score.sort(reverse=True)
    return score #순서 확인

 

설명을 위한 편의 상 answer 를 리스트로 지정해서 리스트에 반복문의 결과물이 적재되는 과정이 보이도록 수정했습니다. 

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

 

answer 에 적재된 값을 합하면 아래와 같이 출력되며 마지막으로 m만 곱해주면 완성입니다.

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

 

 

최종 코드

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

 

오랑이는 위와 같이 풀었지만 더 간단한 풀이법도 있었네요. 

range 함수가 3개의 인수를 가질 때 마지막 인수가 n번째 값을 리턴하는 개념을 활용한 풀이라고 볼 수 있지요. 

 

대망의 한 줄 코딩

def solution(k, m, score):
    return sum(sorted(score)[len(score)%m::m])*m

 

다른 풀이

m-1, len(score), m 일 때 첫번째 예시에 대해서 3, 7, 4 인 셈인데, 이때 score[3] 을 우선 출력한 후에 네번째 값을 찾는 구조라는 점을 간과했습니다. (score[3] 에서 출력 없이 시작하는 거라고 생각해서 안되는 풀이라고 생각한 멍청이..)

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

 



오랑우탄이 영어를 하고 오랑이가 코드마스터가 되는 그날까지~

 

 

 

 

프로그래머스

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

programmers.co.kr

 

반응형