우노
[Queue] 프로그래머스 “기능개발” Python 풀이 본문
문제 링크
풀이
- 작업이 끝나기까지 남은 일수를 모두 큐에 넣은 뒤,
- 큐에서 요소들을 하나씩 빼며, 현재 요소가 이전에 뺏던 요소들 중에 가장 큰 값인지 확인합니다.
- 가장 큰 값이라면 새로운 배포 일정을 추가합니다.
- 가장 큰 값이 아니라면 마지막 배포 일정에 현재 기능의 개수를 추가합니다.
- 따라서, 큐가 [5, 10, 1, 1, 20, 1]로 이루어져있다면 결과로 [1, 3, 2]가 됩니다.
- 예외 케이스로, progresses [95, 94]와 speeds [3, 3]가 있습니다.
코드
from collections import deque
def solution(progresses, speeds):
# 결과 리스트
result = []
# 큐 생성
q = deque()
# 작업이 끝나기까지 남은 일수 계산
for i in range(len(progresses)):
# 남은 작업 진도
remain_task = 100 - progresses[i]
# 작업 진도가 작업 속도와 딱 떨어진다면
if (remain_task % speeds[i] == 0):
# 작업이 끝나기까지 남은 일수
remain_day = remain_task // speeds[i]
# 아니라면
else:
# 작업이 끝나기까지 남은 일수
remain_day = (remain_task // speeds[i]) + 1
# 작업이 끝나기까지 남은 일수를 큐에 추가
q.append(remain_day)
# 최댓값
max_value = -int(1e9)
# 큐가 빌때까지
while q:
# 큐에서 요소 추출
now = q.popleft()
# 현재 요소가 이전에 뺏던 요소들 중에 가장 큰 값이라면
if (max_value < now):
# 최대값 변경
max_value = now
# 새로운 배포 일정을 추가합니다.
result.append(1)
# 마지막 배포 일정에 기능의 개수를 추가합니다.
else:
result[-1] += 1
return result
'Algorithm > Stack, Queue' 카테고리의 다른 글
[Stack] 백준 2493번 “탑” Python 풀이 (0) | 2022.11.05 |
---|---|
[Stack] 백준 3986번 “좋은 단어” Python 풀이 (0) | 2022.11.02 |
[Stack] 백준 4949번 “균형잡힌 세상” Python 풀이 (0) | 2022.11.02 |
[Stack] 프로그래머스 “큰 수 만들기” Python 풀이 (0) | 2022.10.25 |
[Stack] 프로그래머스 “대중소 괄호 짝 맞추기” Python 풀이 (0) | 2022.10.24 |
Comments