본문 바로가기
Coding Test/Python

[프로그래머스] 과제 진행하기 Python 풀이

by giem 2023. 4. 6.
반응형


문제


구현

이 문제는 따로 쉽게 푸는 방법이 없는 것 같아 문제를 그대로 따라가면서 구현을 하면 된다.

 

우선 기본적으로 plans를 시간순서로 sorting 한 후 시작하는 게 좋다.


코드
def solution(plans):
    plans = sorted(plans, key=lambda x : x[1])
    todostack = []
    answer = []
    nowtime = 0
    beforetime = -1
    
    for i in range(len(plans)):
        h,m = plans[i][1].split(':')
        plans[i][1] = int(h)*60+int(m)
            
        if i>0:
            remainingTime = plans[i][1] - plans[i-1][1]
            if remainingTime - int(plans[i-1][2]) >=0:
                answer.append(plans[i-1][0])
                remainingTime -= int(plans[i-1][2])
            
                while remainingTime>0 and len(todostack)>0:    
                    p = todostack.pop()
                    if p[1] <= remainingTime:
                        remainingTime-=p[1]
                        answer.append(p[0])
                    else:
                        p[1]-=remainingTime
                        todostack.append(p)
                        break

            else:
                todostack.append([plans[i-1][0], int(plans[i-1][2])-(plans[i][1]-plans[i-1][1])])
    answer.append(plans[-1][0])
    
    
    while todostack:
        p = todostack.pop()
        answer.append(p[0])
        
    return answer

다른 풀이

한 가지 방법이 더 있는 것 같은데 정리가 안돼서 추후에 시도해보려고 한다.

 

반응형

댓글