과제 진행하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 첫 풀이- fail
- 채점 결과: 런타임에러
- -> wait이 비어있을때 pop을 요청했기 때문
- while문을 돌면서 계속 바뀌기 때문에
- remain, wait이 둘다 있는지를 확인해야함
def solution(plans):
plans.sort(key=lambda x:x[1])
answer = []
wait=[]
for idx, plan in enumerate(plans):
...
if start+time==next_start:
answer.append(name)
elif start+time>next_start:
wait.append((name,(start+time)-next_start))
else: #시간이 남으면
answer.append(name)
if not wait:
continue
remain=next_start-(start+time)
while remain:
wait_name, wait_time=wait.pop()
if remain>=wait_time:
answer.append(wait_name)
remain-=wait_time
else:
wait.append((wait_name, wait_time-remain))
remain=0
while wait:
name,time=wait.pop()
answer.append(name)
return answer
- 풀이
def solution(plans):
plans.sort(key=lambda x:x[1])
answer = []
wait=[]
for idx, plan in enumerate(plans):
name, start, time=plan
hh,mm=map(int,start.split(":"))
start=hh*60+mm
time=int(time)
if idx==len(plans)-1:
answer.append(name)
break
hh2,mm2=map(int,plans[idx+1][1].split(":"))
next_start=hh2*60+mm2
if start+time==next_start:
answer.append(name)
elif start+time>next_start:
wait.append((name,(start+time)-next_start))
else: #시간이 남으면
answer.append(name)
if not wait:
continue
remain=next_start-(start+time)
while remain and wait:
wait_name, wait_time=wait.pop()
if remain>=wait_time:
answer.append(wait_name)
remain-=wait_time
else:
wait.append((wait_name, wait_time-remain))
remain=0
while wait:
name,time=wait.pop()
answer.append(name)
return answer
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][스택] 뒤에 있는 큰 수 (0) | 2024.10.30 |
|---|---|
| [프로그래머스] 롤케이크 자르기 (0) | 2024.10.30 |
| 📍[프로그래머스][DFS][백트래킹] 여행경로 (0) | 2024.10.07 |
| [프로그래머스][정렬] 가장 큰 수 (1) | 2024.10.01 |
| [프로그래머스 ][구현] 숫자 블록 (0) | 2024.07.24 |