0. 문제
1. 문제 설명
빡구현 문제로 뒤에 오는 과제를 확인하는 동시에 남은 시간이 있다면 내가 처리할 수 있는 못 끝낸 과제들을 확인하면 된다. 사실상 못 끝낸 과제들은 '가장 최근에 멈춘 과제'를 먼저 처리하기 때문에 stack 구조로 FILO 구조를 사용하여 구현하면 된다.
2. 문제 풀이
3. 문제 구현
from collections import deque
def solution(plans):
# 남으면 스택에 넣는다. (뒤에 있을수록 가장 최근에 멈춘 과제)
stack = []
answer = []
# 우선 먼저 시작하는 순서대로 정렬
plans=sorted(plans, key = lambda x:x[1])
# 현재 시각
now = 0
# 하나씩 살펴보기
for i in range(len(plans)):
if i == len(plans)-1:
answer.append(plans[i][0]);
for j in range(len(stack)-1,-1,-1):
answer.append(stack[j][0]);
continue
check = plans[i][1]
hour, minute = map(int,check.split(':'))
check_time = hour*60+minute
next = plans[i+1][1]
next_hour, next_minute = map(int,next.split(':'))
next_time = next_hour*60+next_minute
if (next_time - check_time) < int(plans[i][2]):
stack.append([plans[i][0],int(plans[i][2])-(next_time-check_time)])
# 다른 애들을 해줄 수 있다.
else:
answer.append(plans[i][0])
possible_time = next_time-(int(plans[i][2])+check_time)
while stack and possible_time:
temp_time = stack.pop()
temp_time[1]=int(temp_time[1])
if possible_time >= temp_time[1]:
answer.append(temp_time[0])
possible_time-=temp_time[1]
else:
stack.append([temp_time[0], temp_time[1]-possible_time])
possible_time=0
return answer
'알고리즘 > 코딩테스트' 카테고리의 다른 글
[코딩테스트] 팀네이버 2024 코딩테스트 후기 (2) | 2024.03.31 |
---|---|
[PS] 프로그래머스 - 뒤에 있는 큰 수 찾기 (0) | 2023.02.24 |
카카오인턴 코딩테스트 2022 05 07 후기 (0) | 2022.05.21 |