First In Fisrt Out (FIFO)Stack과 반대되는 개념
a = [1, 2, 3, 4, 5]
a.append(10) # 큐의 put = append()
a.pop() # 큐의 get = pop(0) -> 맨 앞의 요소가 삭제 및 출력
# pop(0) -> 0번째 요소 삭제 및 출력
def solution(progresses, speeds):
answer = []
while len(progresses) > 0:
cnt = 0
while len(progresses) > 0 and progresses[0] >= 100:
cnt += 1
progresses.pop(0)
speeds.pop(0)
progresses = [progresses[i] + speeds[i] for i in range(len(progresses))]
if cnt > 0:
answer.append(cnt)
return answer
progresses가 비었다면 멈춘다.cnt = 0)proegresses의 맨 앞 작업을 확인한다.progresses와 speeds에서 제거하고 배포된 기능 개수를 증가시킨다. (cnt += 1) -> 3으로 돌아간다import math
def solution(progresses, speeds):
progresses = [math.ceil((100 - a) / b) for a, b in zip(progresses, speeds)]
answer = []
front = 0, 0
for idx in range(len(progresses)):
if progresses[idx] > progresses[front]:
answer.append(idx - front)
front = idx
answer.append(len(progresses) - front)
return answer
math.ceil()함수는 실수를 입력하면 올림하여 정수를 반환하는 함수이다.
ex) math.ceil(3.14) = 4
math.ceil()을 활용하여 소요시간을 각각 구한다.
→ progresses = [7, 3, 9]
progresses의 각 소요시간을 확인하는데 이때 front에 가장 오래걸린 소요 시간의 인덱스를 저장해둔다.
idx = 0 : 첫번째 수(7) 보다 첫번째 수 (7) 는 같기 때문에 pass → front = 0
idx = 1 : 첫번째 수(7) 보다 두번째 수 (3) 는 같기 때문에 pass → front = 0
idx = 2 : 첫번째 수(7) 보다 세번째 수(9) 는 크기 때문에 현재 인덱스부터 프론트인덱스의 차를 구하고 이를 answer에 append (그 전까지 친구들은 동시 출시니까) 프론트인덱스를 현재인덱스로 업데이트! → front = 2
맨 마지막에 현재 프론트인덱스와 전체 길이의 차를 구해서 남은 친구들 다 출시