파이썬/백준

프로그래머스 | 파이썬 과제 진행하기

채린.__. 2023. 11. 4. 07:08

문제

https://school.programmers.co.kr/learn/courses/30/lessons/176962

 

프로그래머스

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

programmers.co.kr

 

정답

from collections import deque


def solution(plans):
    
    temp = deque()
    left_time = 0
    answer = []
    
    for plan in plans:
        time=0
        a,b = plan[1].split(':')
        time = (60*int(a)) + int(b)
        plan[1] = time
        plan[2] = int(plan[2])
    
    plans = sorted(plans, key = lambda x : x[1])
    
    for i in range(len(plans)):
        sub, start_time, dur_time = plans[i]
        
        while temp:
            sub_, dur_time_ = temp.pop()
            if left_time >= dur_time_:
                answer.append(sub_)
                left_time -= dur_time_
            else:
                temp.append([sub_, dur_time_-left_time])
                break

        
        temp.append([sub, dur_time])
        
        if i < len(plans)-1:
            left_time = plans[i+1][1] - start_time
            
    while temp:
        과제, 시간 = temp.pop()
        answer.append(과제)
    
    return answer

 

>> temp에 언제 값을 넣어줄 것인지에 대한 고민이 있었다. 조건이 많아서 조건의 순서를 잘 배열해서 코드를 짜는게 중요했던 문제.