오랑우탄의 반란
프로그래머스 | 과일 장수 (Python3) 본문
반응형
오늘도 오랑이는 문제를 풉니다.
과일 장수
풀이 과정
- 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
오랑우탄이 영어를 하고 오랑이가 코드마스터가 되는 그날까지~
반응형
'PYTHON > 프로그래머스' 카테고리의 다른 글
프로그래머스 | 소수 만들기 (파이썬) combination, 에라토스테네스의 체 (0) | 2024.07.31 |
---|---|
프로그래머스 | 모의고사 (Python3) Enumerate (2) | 2024.07.23 |
프로그래머스 | 2016년 (Python3) (0) | 2024.07.22 |
프로그래머스 | 명예의 전당 (1) (Python3) (1) | 2024.07.16 |
프로그래머스 | 콜라 문제 (Python3) (2) | 2024.07.16 |