[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€-Lv3] λ””μŠ€ν¬ 컨트둀러 / Python

πŸ“š Problem Solving/Programmers

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - λ””μŠ€ν¬ 컨트둀러

ν•˜λ“œλ””μŠ€ν¬λŠ” ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μž‘μ—…λ§Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ””μŠ€ν¬ 컨트둀러λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법은 μ—¬λŸ¬ 가지가 μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ 일반적인 방법은 μš”μ²­μ΄ λ“€μ–΄μ˜¨ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 예λ₯Ό

programmers.co.kr

import sys
import heapq

input = sys.stdin.readline

jobs = [list(map(int, input().split())) for _ in range(int(input()))]


def solution(jobs):
    answer, now, i = 0, 0, 0
    start = -1
    q = []

    while i < len(jobs):
        for job in jobs:
            if start < job[0] <= now:
                heapq.heappush(q, (job[1], job[0]))
        if q:
            current = heapq.heappop(q)
            start = now
            now += current[0]
            answer += now - current[1]
            i += 1
        else:
            now += 1

    return answer // len(jobs)


print(solution(jobs))

 

ν•΄μ„€

μ‹œμž‘ μ‹œμ μ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” μž‘μ—…λ“€ 쀑 μž‘μ—…κΈΈμ΄κ°€ μž‘μ€ μž‘μ—…λΆ€ν„° μ‹€ν–‰ν•˜λ©΄ λœλ‹€.

 

start = μ‹œμž‘μ§€μ , now = μž‘μ—…μ΄ λλ‚œ μ‹œμ 

1. 이전 μž‘μ—…μ˜ μ‹œμž‘μ‹œμ κ³Ό μž‘μ—…μ΄ λλ‚œ μ‹œμ  사이에 λ„μ°©ν•œ μž‘μ—…λ“€μ΄ 있으면 heaq에 μ €μž₯ν•œλ‹€.

2. λ„μ°©ν•œ μž‘μ—…λ“€μ΄ μ‘΄μž¬ν•œλ‹€λ©΄ μž‘μ—…μ‹œκ°„μ΄ 제일 μž‘μ€ μž‘μ—…μ„ κΊΌλ‚Έλ‹€.

3. 이제 μ‹œμž‘μ§€μ μ€ 이전 μž‘μ—…μ΄ λλ‚œ μ‹œμ μ΄ λœλ‹€.

4. μž‘μ—… 끝 μ‹œμ μ€ 이전 μž‘μ—… 끝 μ‹œμ μ—μ„œ ν˜„μž¬ μž‘μ—…μ˜ μž‘μ—…μ‹œκ°„μ„ λ”ν•œ μ‹œμ μ΄ λœλ‹€.

5. answerμ—λŠ” ν˜„μž¬μž‘μ—…μ΄ λλ‚œ μ‹œμ μ—μ„œ ν˜„μž¬ μž‘μ—…μ΄ λ„μ°©ν•œ μ‹œμ μ„ λΉΌμ€€ 값을 λ”ν•œλ‹€.

6. 2번 κ³Όμ •μ—μ„œ λ„μ°©ν•œ μž‘μ—…λ“€μ΄ μ—†λ‹€λ©΄ nowλ₯Ό 1μ”© μ¦κ°€μ‹œμΌœμ€€λ‹€.