728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12927
- 실패1 - 가장 많이 남은 작업량 1만큼 처리
- 효율성 시간초과로 실패
- .sort()는 시간복잡도가 최악의 경우 O(nlogn)이다
def solution(n, works):
for _ in range(n):
works.sort(reverse=True)
if works[0] > 0:
works[0] -= 1
else:
break
return sum([i**2 for i in works])
- 실패2
- 효율성 테스트 실패
- .index() 시간복잡도 : O(n)
- max() 시간복잡도 : O(n)
def solution(n, works):
while n > 0:
idx = works.index(max(works))
if works[idx] <= 0:
break
works[idx] -= 1
n -= 1
return sum([i**2 for i in works if i > 0])
- 성공
- n이 최대 100만이니 O(n)까지 가능
- 정렬을 하거나 최댓값을 찾으면 O(n^2)이 되므로
- heapq 사용
- heapq.heapqpop(list)을 하면 list의 최솟값을 pop함
import heapq
def solution(n, works):
# 야근 X
if n >= sum(works):
return 0
# heapq는 최솟값을 pop해줌
works = [-i for i in works]
heapq.heapify(works)
for _ in range(n):
w = heapq.heappop(works)
heapq.heappush(works,w+1)
# 야근 피로도
return sum([i**2 for i in works])
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[230228] 소수 구하기(에라토스테네스의 체) - Python (0) | 2023.02.28 |
---|---|
[230228] heapq (추가, 삭제, 리스트를 heap으로 변환) - Python (0) | 2023.02.28 |
[230228] n진법 구하기(with divmod) - Python (0) | 2023.02.28 |
[프로그래머스] [3차] n진수 게임 - Python (1) | 2023.02.28 |
위상 정렬(Topology Sort) 알고리즘 (1) | 2022.12.10 |
댓글