문제

이 문제는 전형적인 stack 문제다.
앞의 작업이 현재 날짜를 기준으로 출시가 불가능 하다면 뒤의 작업이 출시가능해도 출시할 수 없는 시스템이라고 이해하면 된다.
일단 각 작업이 며칠을 기준으로 출시가 가능한지 구해서 stack에 저장해두었다
이때 유의할 점은 progresses 배열을 역순으로 순회하면서 저장해야 앞의 작업이 stack의 제일 윗부분에 쌓일 수 있다는 것이다.
#각 작업이 며칠 뒤 배포가 가능한지 저장 이때 앞의 작업이 나중에 쌓이도록 역순으로 저장
for i in range(len(progresses)-1,-1,-1):
tmp = (100-progresses[i]) // speeds[i]
if (100-progresses[i]) % speeds[i] != 0:
tmp += 1
stack.append(tmp)
이런식으로 (100-작업진도)/작업속도 를 해주는데 나누어 떨어지지 않는다면 1을 더해서 저장해 주었다.
이후 이 stack을 pop을 통해 앞의 작업부터 순서대로 출시가 가능한지 여부를 따져가며 answer에 저장해주면 된다.
정답코드
def solution(progresses, speeds):
answer = []
stack = []
#각 작업이 며칠 뒤 배포가 가능한지 저장 이때 앞의 작업이 나중에 쌓이도록 역순으로 저장
for i in range(len(progresses)-1,-1,-1):
tmp = (100-progresses[i]) // speeds[i]
if (100-progresses[i]) % speeds[i] != 0:
tmp += 1
stack.append(tmp)
day = 0
while(stack):
day += 1
ans = 0
now = stack.pop()
#현재 작업이 오늘 날짜에 출시가능하다면
if now <= day:
ans += 1
#뒤의 작업이 남아있을 때
if stack:
while(stack):
nxt = stack.pop()
#뒤의 작업이 오늘 같이 출시 가능할 때
if nxt <= day:
ans+=1
#뒤의 작업이 오늘 출시 불가능 할 때
else:
stack.append(nxt)
break
answer.append(ans)
else:
stack.append(now)
return answer
현재 작업이 출시가 가능해서 같이 출시가능한 뒤의 작업을 살필때 비어있는 stack에서 pop을 하지 않도록 예외처리하는 부분이 중요하다.
그리고 만약 출시가 불가능하다면 pop했던 것들을 다시 append 해주는 것도 중요하다
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 타겟넘버 - python 파이썬 (2) | 2024.10.16 |
|---|---|
| [프로그래머스] 다리를 지나는 트럭 - python 파이썬 (0) | 2024.10.04 |
| [프로그래머스] 입국심사 - python 파이썬 (1) | 2024.08.28 |
| [프로그래머스] 단속 카메라 - python파이썬 (4) | 2024.08.27 |
| [프로그래머스] 구명보트 - python파이썬 (1) | 2024.08.21 |