728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/176962
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(plans):
plans = [[n, int(s.split(':')[0])*60 + int(s.split(':')[1]),int(p)] for n, s, p in plans]
plans = sorted(plans, key=lambda x:-x[1])
stack, answer = [plans.pop()], []
time = stack[-1][1]
while plans:
if stack:
stack[-1][2] -= 1
if stack[-1][2] == 0:
answer.append(stack.pop()[0])
if plans[-1][1] == time:
stack.append(plans.pop())
time += 1
while stack:
answer.append(stack.pop()[0])
return answer
"""
00:00 ~ 23:59까지의 시간만 있는다고 했으니
while문이 1440번 정도 돌겠다고 생각해서 시간순으로 while문을 돌렸다.
먼저 plans의 형태가 ["korean", "11:40", "30"] 로 되어 있으니,
시간을 hh*60 + mm 으로 바꾸고, string을 int로 바꿔주는 작업을 했다.
그다음 시간순서에 맞춰서 sort해주고, stack에 첫일정을 넣어주었다.
초기 시간도 첫일정의 시간으로 맞추었다.
while문으로 들어가서 stack에서 시간을 1 감소시켜준다.
여기서 while문은 1초에 한번씩 돌기 때문이다.
["korean", "11:40", 30] -> ["korean", 700, 30]으로 바뀌고
이게 stack에 들어갔다고 가정하면 [korean, 700, 29]로 바뀐다.
0이 된다면 그 일정을 다한것이므로 answer에 이름만 넣는다.
그리고 plans에서 가장빠른 일정이 time과 같다면 stack에 넣어준다.
이를 반복한다.
그리고 plans가 빈 배열이 된다면 이제 남은 일정만 하면 되기때문에
stack에서 하나씩 꺼내어 answer에 넣어준다.
"""728x90
반응형
'개발 > 문제풀이' 카테고리의 다른 글
| 구름레벨 '계수기 만들기' 파이썬 코드 (0) | 2023.10.17 |
|---|---|
| AWS 포트(방화벽) 연결 실수 해결 [ufw 문제] (2) | 2023.10.17 |
| 프로그래머스 '다리를 지나는 트럭' 파이썬 풀이 (0) | 2023.09.04 |
| 구름레벨 '징검다리건너기' 파이썬 풀이 (0) | 2023.08.30 |
| 프로그래머스 탐욕법(Greedy)'단속카메라' 파이썬 풀이 (0) | 2023.08.30 |
댓글