Post

Programmers_연습문제 야근 지수(python)

프로그래머스 -야근 지수 문제 입니다.

1. 문제

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


2. 분류 및 난이도

Programmers 문제입니다.
연습문제 문제입니다.

Level 3난이도의 문제입니다.


3. 생각한 것들(문제 접근 방법)

  • 문제는 직관적이고, n만큼 돌아도 문제가 풀릴 것이라 생각했습니다.
  • Level3 답게 일반적인 방법으로는 안풀립니다.
  • Priority Queue로 풀면 시간초과가 뜨고 heap으로 풀면 시간초과가 뜨지 않습니다.(python 기준)

4. 접근 방법을 적용한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#우선순위 큐로 푼 흔적
from queue import PriorityQueue
import heapq
def solution(n, works):
    answer = 0
    heap = []
    # 우선순위를 위해 -로 바꿔 넣습니다.
    for work in works :
        heapq.heappush(heap,-work)
    
    #n만큼 돌면서 우선순위를 갱신해줍니다.
    while n :
        work = -(heapq.heappop(heap))
        work-=1
        heapq.heappush(heap,-work)
        n-=1
    # -h가 음수인 경우는 고려할 필요가 없습니다.
    for h in heap:
        if -h < 0 :
            continue
        #어차피 - 곱하기 - 는 양수이므로 그냥 곱해버렸습니다.
        answer += h*h
    
    return answer


5. 결과

필요시. c++ 짜드리겠습니다. 설명이 필요시 댓글달아주세요.

This post is licensed under CC BY 4.0 by the author.