https://school.programmers.co.kr/learn/courses/30/lessons/176962
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
과제에 대한 정보인 [name, start, playtime]을 원소로하는 plans 배열이 주어지고 정해진 규칙에 따라 과제를 처리한다.
과제를 끝낸 순서를 배열에 담아 반환하라.
과제 처리 규칙
시간 형태가 hh:mm이기 때문에 시간을 다루는대에 애를 먹었다.
hh:mm 형태로 처리하지 않고 분단위로 변환하여 처리했다.
def solution(plans):
answer = []
stack = []
plans.sort(key= lambda x: x[1])
def getTime(i):
h = int(plans[i][1][:2])
m = int(plans[i][1][3:])
return h * 60 + m
def doTheRemainingAssignmentsBeforeNext(now, next):
while next > now and stack:
name, playtime = stack.pop()
if playtime <= next - now:
answer.append(name)
now += playtime
else:
stack.append((name, playtime - (next - now)))
break
# N-1번째 과제까지 처리
for i in range(len(plans) - 1):
now = getTime(i)
playtime = int(plans[i][2])
next = getTime(i+1)
if now + playtime <= next:
answer.append(plans[i][0])
now += playtime
doTheRemainingAssignmentsBeforeNext(now, next)
else:
stack.append((plans[i][0], playtime - (next - now)))
# 마지막 과제 처리, 남은 과제 처리
answer.append(plans[-1][0])
while stack:
name, playtime = stack.pop()
answer.append(name)
return answer
[프로그래머스] 169199. 리코쳇 로봇| BFS | 파이썬, 소스코드, 정답 (1) | 2023.05.05 |
---|---|
[프로그래머스] 172927. 광물 캐기| 그리디 | 파이썬, 소스코드, 정답 (1) | 2023.05.04 |
[프로그래머스] 178870. 연속된 부분 수열의 합 | 투포인터 | 파이썬, 소스코드, 정답 (0) | 2023.05.02 |
[프로그래머스] 181187. 두 원 사이의 정수 쌍 | 수학 | 파이썬, 소스코드, 정답 (1) | 2023.05.01 |
[프로그래머스] 181188. 요격시스템 | 정렬 | 파이썬, 소스코드, 정답 (1) | 2023.04.30 |