난이도: 레벨2
https://school.programmers.co.kr/learn/courses/30/lessons/176962#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
제출코드
#17:42 18:30 37.5점
def solution(plans):
plans.sort(key=lambda x:x[1])
for p in plans:
hour,minute = p[1].split(":")
start_time = int(hour)*60+int(minute)
p[1]=start_time
p[2]=int(p[2])
result=[]
delay=[]
for i in range(len(plans)-1):
gap = plans[i+1][1]-plans[i][1]
if gap > plans[i][2]:
result.append(plans[i][0])
gap-=plans[i][2]
while gap>0 and delay:
assign= delay.pop()
if gap >=assign[2]:
gap-=assign[2]
result.append(assign[0])
else:
assign[2]-=gap
delay.append(assign)
gap=0
# for j in range(gap):
# assign[2]-=1
# if assign[2]==0:
# result.append(assign[0])
# if not delay:
# break
# assign = delay.pop()
# continue
# if j==gap-1:
# delay.append(assign)
elif gap == plans[i][2]:
result.append(plans[i][0])
elif gap < plans[i][2]:
plans[i][2]-=gap
delay.append(plans[i])
result.append(plans[-1][0])
while delay:
result.append(delay.pop()[0])
return result
테스크 케이스 6번,9번에서 에러가 뜬 코드 (바뀐 부분ㄴ은 gap(사이 빈시간)을 for로 초마다 반복문 돌리면서 한것과 -연산자로 뺴준 차이이다.
#17:42 18:30 37.5점 최종 92점
def solution(plans):
plans.sort(key=lambda x:x[1])
for p in plans:
hour,minute = p[1].split(":")
start_time = int(hour)*60+int(minute)
p[1]=start_time
p[2]=int(p[2])
result=[]
delay=[]
for i in range(len(plans)-1):
gap = plans[i+1][1]-plans[i][1]
if gap > plans[i][2]:
result.append(plans[i][0])
gap-=plans[i][2]
if not delay:
continue
else:
assign=delay.pop()
for j in range(gap):
assign[2]-=1
if assign[2]==0:
result.append(assign[0])
if not delay:
break
assign = delay.pop()
continue
if j==gap-1:
delay.append(assign)
elif gap == plans[i][2]:
result.append(plans[i][0])
elif gap < plans[i][2]:
plans[i][2]-=gap
delay.append(plans[i])
result.append(plans[-1][0])
while delay:
result.append(delay.pop()[0])
return result
'Problem Solving > 구현' 카테고리의 다른 글
비밀지도- 2진수 만들기 (1) | 2023.11.21 |
---|---|
약수의 개수와 덧셈 (0) | 2023.11.13 |
JadenCase 문자열 만들기 (0) | 2023.09.17 |
짝수와 홀수 (0) | 2023.09.17 |
자릿수 더하기 (0) | 2023.09.17 |