[プログラマpython]スタックキュー-機能開発


プログラマスタックキュー機能開発プール
https://programmers.co.kr/learn/courses/30/lessons/42586
問題はリンクにあります

stackを使用してpop(0)を使用する場合、効率がない場合は、stackを反転してpop(*-1 defaultを使用することができます.
私はキューで問題を解いた.
問題を解く
import math
from collections import deque

def solution(progresses, speeds):
    answer = []
    leftover = [] #남은 양
    spentday = deque() #필요한 일수
    cnt = 1
    for i in progresses:
        leftover.append(100 - i) #100에서 진행도를 빼줘서 남은걸 구해준다
    for i in range(len(leftover)):
        spentday.append(math.ceil(leftover[i] / speeds[i])) #올림해줌

    while True:
        for i in range(1, len(spentday)):
            tmp = spentday[0]  #첫번째를 기준으로
            if tmp >= spentday[i]: #첫번째보다 필요한 일수가 적은것이 있나 확인 
                cnt += 1  #첫번째가 완료된다면 같이 완료될 개수 cnt++
            elif tmp < spentday[i]: #만약 첫번째보다 크다면 
                break  #for문 종료
        answer.append(cnt) 
        for j in range(cnt):  #완료된 개수만큼 pop해주기
            spentday.popleft()
        cnt = 1  #개수 초기화
        if len(spentday) == 0:  #0이 될때까지 반복
            break
    return answer
解けたけどめちゃくちゃな感じううう
Teke 1.2.3.4が間違っていたら[99, 99, 99] ,[1, 1,1]を追加してみましょう.
他人の解答
def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0]<-((p-100)//s):
            Q.append([-((p-100)//s),1])
        else:
            Q[-1][1]+=1
    return [q[1] for q in Q]
zipで解決しました.
100-p-(p-100)を使わずにmathを使いますceilなしでオンラインを書きたいようです.(p-100)=>負、(p-100)/s=>負の値を降格しました(負から絶対値に降格しました)-(p-100)/s)=>正の値をアップグレードしました
前回も、Zipをしっかり利用します!!