사용 언어 - Python3
문제 - 과일 장수
정답
시간초과없이 계산 간편화하기 (정답 맞춘 여부 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
레퍼런스
- 정답 깃허브
'Algorithm > 구현' 카테고리의 다른 글
[프로그래머스 lv1] 옹알이(2) (0) | 2023.05.10 |
---|---|
[프로그래머스 lv1] 푸드 파이트 대회 (1) | 2023.05.09 |
[프로그래머스 lv1] 기사단원의 무기 (1) | 2023.04.25 |
[프로그래머스 lv1] 명예의 전당 (0) | 2023.04.25 |
[프로그래머스 lv1] 문자열 나누기 (0) | 2023.04.25 |
댓글