[프로그래머스] 과제 진행하기(파이썬)

서봉성·2023년 6월 29일
0

코딩테스트

목록 보기
25/27

문제

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

코드

def solution(plans):
    answer = []
    arr=[]
    for plan in plans:
        hour, minute = map(int, plan[1].split(":"))
        
        arr.append([plan[0], hour*60+minute, int(plan[2])])
    
    arr.sort(key=lambda x: x[1])
    
    stack=[]
    
    for i in range(len(arr)-1):
        time = arr[i+1][1]-arr[i][1]
        if arr[i][2]==time:
            answer.append(arr[i][0])
        elif arr[i][2]>time:
            arr[i][2]-=time
            stack.append(i)
        else:
            time-=arr[i][2]
            answer.append(arr[i][0])
            
            while stack:
                idx = stack.pop()
                if arr[idx][2]==time:
                    answer.append(arr[idx][0])
                    break
                elif arr[idx][2]>time:
                    arr[idx][2]-=time
                    stack.append(idx)
                    break
                else:
                    time-=arr[idx][2]
                    answer.append(arr[idx][0])
        
    answer.append(arr[-1][0])
        
    while stack:
        idx=stack.pop()
        answer.append(arr[idx][0])        
    
    return answer
profile
OverStudy

0개의 댓글