문제풀이/기타

[파이썬] Pro 과제 진행하기

승무_ 2023. 12. 20. 08:06

문제

https://school.programmers.co.kr/learn/courses/30/lessons/176962?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드

from collections import deque

def convert(s):
    h,m = map(int, s.split(":"))
    return h*60+m
    

def solution(plans):
    answer = []
    
    plans=[(name, convert(start), int(playtime)) for name, start, playtime in plans]
    plans.sort(key = lambda x: x[1])
    
    stack=deque()
    left_time=0
    for i in range(len(plans)):
        name, start, playtime = plans[i]
        
        while stack:
            _name, _playtime = stack.pop()
            if left_time >= _playtime:
                left_time-=_playtime
                answer.append(_name)
            else:
                _playtime-=left_time
                stack.append([_name,_playtime])
                break
        # 현재 작업도 작업 큐에 넣음
        stack.append([name, playtime])
        
        if i<len(plans)-1:
            next_start=plans[i+1][1]
            left_time=next_start-start
    
    # 추가적인 선점이 없으므로 최근에 멈춘것 부터 수행    
    while stack:
        _name, _playtime = stack.pop()
        answer.append(_name)
    
    return answer