[프로그래머스] 야근지수

ganta·2021년 1월 19일

알고리즘 문제해결

목록 보기
1/24
post-thumbnail

https://programmers.co.kr/learn/courses/30/lessons/12927

처음에는 works중에서 가장 큰 수를 찾아 그 일을 하게 되면 야근 피로도를 최소화 할 수 있다고 생각하고 접근하였다

from functools import reduce

def solution(n, works):
    answer = 0
    
    for i in range(n):
        max_num = max(works)
        if max_num == 0:
            break
        max_idx = works.index(max_num)
        works[max_idx] -= 1
    
    return reduce(lambda acc , cur: acc + pow(cur,2), works, 0)

결과는... 효율성에서 실패

혹시... max함수가 시간을 많이 잡아먹는가 해서 heapq를 사용

결과는... 성공!

from functools import reduce
import heapq

def solution(n, works):
    answer = 0
    new_works = [[-work, work] for work in works]
    heapq.heapify(new_works)
    
    for i in range(n):
        search = heapq.heappop(new_works)
        if search[0] == 0:
            break
        heapq.heappush(new_works, [search[0] + 1, search[1] - 1])
    
    
    return reduce(lambda acc , cur: acc + pow(cur[1],2), new_works, 0)

생각보다 max함수가 시간을 많이 잡아먹는걸 느꼈다.

다른 코드 참고하니 sort로 해결하신 분들이 많았다. 앞으로는 최대, 최소문제도 heap이나 sort이용하는 걸로

profile
한걸음씩 꾸준히

0개의 댓글