๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/ใ„ด problems

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํž™ : ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ

by vodkassi 2021. 7. 13.
728x90

๋ฌธ์ œ ์„ค๋ช…

 

https://programmers.co.kr/learn/courses/30/lessons/42627 ์ฐธ์กฐ

 

 

๋‚˜์˜ ์†”๋ฃจ์…˜

 

์ˆ˜์‹์„ ๋งŒ๋“ค์–ด ํ™œ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค. (๋‹ค๋งŒ ๊ณต์‹์„ ์•Œ์•„๋‚ด๊ธฐ๊นŒ์ง€ ์‹œ๊ฐ„์ด ๋‹ค์†Œ ๊ฑธ๋ ธ๋‹ค) ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ํ‰๊ท  ์‹œ๊ฐ„์„ ์ตœ๋Œ€ํ•œ ์ค„์ด๋Š” ๊ฒƒ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ‰๊ท ์˜ ํŠน์ง•์„ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉฐ ์ ‘๊ทผํ–ˆ๋‹ค. 

 

ํ‰๊ท ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์› ๋ฐ์ดํ„ฐ ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋Š” ๋งŒํผ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ด๋‹ค. ํ‰๊ท ์€ ์ˆซ์ž๋“ค์ด ๋ฐ€์ง‘๋˜์–ด ์žˆ๋Š” ๊ฐ’์ด ์ถ”์ถœ๋œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์–ด๋งˆ์–ด๋งˆํ•˜๊ฒŒ ํฐ ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค๋ฉด ํ‰๊ท  ์—ญ์‹œ ๊ทธ๋งŒํผ ๋†’์•„์ง€๊ฒŒ ๋œ๋‹ค. 

 

jobs ๋ฐฐ์—ด์—๋Š” ํ•˜๋‚˜์˜ ์ž‘์—…์ด ์š”์ฒญ๋˜๋Š” ์‹œ์ ๊ณผ ํ•ด๋‹น ์ž‘์—…์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„๋“ค์˜ ์ง‘ํ•ฉ์ด ๋‹ด๊ฒจ์žˆ๋‹ค. ์ž‘์—…์ด ์š”์ฒญ๋˜๋Š” ์‹œ์ ์— ์ฆ‰์‹œ ์‹คํ–‰๋˜๋ฉด ์ž‘์—… ์‹œ๊ฐ„์€ ์ตœ์†Œํ™” ๋  ๊ฒƒ์ด๋ฉฐ, ์ž‘์—…์ด ์‹œ์ž‘๋˜๋Š” ์‹œ๊ฐ„์ด ๋’ค๋กœ ๋ฐ€๋ฆด์ˆ˜๋ก ์ด ์ž‘์—… ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚  ๊ฒƒ์ž„์€ ๋‹น์—ฐํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์ž‘์—…์ด ์š”์ฒญ ์‹œ๊ฐ„๊ณผ ์ตœ๋Œ€ํ•œ ๊ทผ์ ‘ํ•œ ์‹œ๊ฐ„์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ผ์ฐ ๋“ค์–ด์˜จ ์š”์ฒญ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ž‘์—… ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. 

 

import heapq

def solution(jobs):
    result = []
    heapq.heapify(jobs)
    time = jobs[0][0] 
    
    while True:
        
        if len(jobs) == 0:
            break

        if jobs[0][0] > time:  
            first = heapq.heappop(jobs)
            time = first[1] + first[0]
            
        else:
            new_jobs = list(filter(lambda x : x[0] <= time, jobs))
            new_jobs.sort(key = lambda x: (x[1],-x[0]))  
            first = new_jobs[0]
            time += first[1] 
            jobs.remove(first)

        result.append(time-first[0])       

    return sum(result) / len(result)

 

๋Œ“๊ธ€