728x90
https://school.programmers.co.kr/learn/courses/30/lessons/176962
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from collections import deque
def solution(plans):
answer = []
plans = sorted(plans, key=lambda x: x[1])
for i in range(len(plans)):
a, b = plans[i][1].split(':')
plans[i][1] = int(a) * 60 + int(b)
num = len(plans)
waitRoom = deque()
print(plans)
while len(answer) != num:
if len(plans) > 0:
stone = plans.pop(0)
if len(plans) == 0:
answer.append(stone[0])
else:
if stone[1] + int(stone[2]) <= plans[0][1]:
answer.append(stone[0])
else:
waitRoom.append(stone[0])
else:
answer.append(waitRoom.pop())
print(answer)
return answer

이 세문제만 맞추고 나머진 죄다 실패....
누가 반례를 찾아주세요...

아마 stone[1]이랑 plans[0][1]사이의 텀이 길 때, waitRoom에 있는 시간을 고려해서 answer에 붙여야하는것 같다.
from collections import deque
def solution(plans):
answer = []
plans = sorted(plans, key=lambda x: x[1])
for i in range(len(plans)):
a, b = plans[i][1].split(':')
plans[i][1] = int(a) * 60 + int(b)
num = len(plans)
waitRoom = deque()
print(plans)
while len(answer) != num:
if len(plans) > 0:
stone = plans.pop(0)
if len(plans) == 0:
answer.append(stone[0])
else:
if stone[1] + int(stone[2]) <= plans[0][1]:
answer.append(stone[0])
if len(waitRoom) > 0:
if plans[0][1] - (stone[1] + int(stone[2])) >= waitRoom[len(waitRoom)-1][1]:
while waitRoom[len(waitRoom)-1][1] <= plans[0][1] - (stone[1] + int(stone[2])):
name = waitRoom.pop()
answer.append(name[0])
else:
# 대기열에 넣을 이름, 남은 시간
waitRoom.append([stone[0], int(stone[2]) - (plans[0][1] - stone[1])])
else:
if len(waitRoom) > 0:
name = waitRoom.pop()
answer.append(name[0])
print(answer)
return answer

아까보단 좀 더 맞았다..런타임 오류라..
728x90
'Algorithm > Programmers' 카테고리의 다른 글
Lv.1 공원 산책 (0) | 2023.11.05 |
---|---|
Lv1.추억 점수 (0) | 2023.11.05 |
프로그래머스 Lv2. 호텔 대실 - 파이썬 (0) | 2023.08.12 |
프로그래머스 괄호변환 - python (0) | 2021.03.13 |