728x90
def solution(no, works):
# max_idx = works.index(max(works))
# works[works.index(max(works))] -= 1
while no > 0: # reach 0 exit
max_idx = works.index(max(works))
works[max_idx] -= 1
no -= 1
return sum([x**2 if x > 0 else 0 for x in works])
return할때 0보다 큰 조건을 안넣어줘서 오답이 나온것 같아서 넣어줬더니 통과했다.
일단 여기까지는 했는데
효율성에서 통과를 못했다
시간을 줄일 수 있는 부분이 while문 안에서 해결되어야 될거 같은데
음.
sorted로 사용하니까 통과하긴 하는데 오래걸리긴 한다.
def solution(n, works):
while n > 0:
works = sorted(works)
works[-1] -= 1
n -= 1
return sum([x**2 if x > 0 else 0 for x in works])
찾아보니 heapq를 사용해서 우선순위 큐를 사용해야 효율적으로 풀린다.
heap 자체가 최대, 최솟값을 빠르게 찾아내는 자료구조이기 때문에.
import heapq
def solution(no, works):
if no > sum(works):
return 0
else:
works = [(-i,i) for i in works] # max heap
heapq.heapify(works)
# print(works)
for _ in range(no):
work = heapq.heappop(works)[1] -1 #[rank,value] = value
heapq.heappush(works,(-work, work)) # re-push subtracted value to original heap
return sum(i[1]**2 for i in works)
기존 sorting보다는 10배 빠르게 실행이 된다.
출처: yeahajeong.tistory.com/215
기존 문제: programmers.co.kr/learn/courses/30/lessons/12927
728x90
'DC 2' 카테고리의 다른 글
[자료구조] 사전순 부분문자열 파이썬 (0) | 2021.04.23 |
---|---|
[자료구조] 짝지어 제거하기 파이썬 (stack, valid pair) (0) | 2021.04.22 |
[자료구조] 스킬트리 파이썬 (0) | 2021.04.22 |
[자료구조] 올바른 괄호 파이썬 (valid parentheses, if~) (0) | 2021.04.22 |
[자료구조] 세 소수의 합 파이썬 (prime number) (0) | 2021.04.22 |
댓글