プログラマスタック/キュー3.機能開発


質問リンク

以上のように、進捗が100を超えると導入できますが、最上位の機能が完了してこそ導入できる問題です.

私が解読したコード

def solution(progresses, speeds):
    answer =[]    
       
    index =0
    length = 0

    while progresses:
        
        # print(progresses)
        for i in range(len(progresses)):
            progresses[i]+=speeds[i]
        
        if len(progresses)==1:
            progresses.pop()
            answer.append(1)
            break
        while progresses[0]>=100:
            
            if len(progresses)==1:
                length+=1
                progresses.pop(0)
                answer.append(length)
                length=0
                break
            
            progresses.pop(0)
            speeds.pop(0)
            length +=1
            index +=1
            
        if (length > 0):
            answer.append(length)
            length =0
            index =0
        print(answer)
            
            
    print(answer)
    return answer


solution([95, 90, 99, 99, 80, 99],[1, 1, 1, 1, 1, 1])
コードが非常に長い...汚くてたまらない!!!
解題方式はprogress配列が存在する前にwhileゲートを回すことでpogress配列の長さに従って速度を増やし,時間が経つにつれて進捗が増加することを示す.
方法は、progressの最初の要素が100より大きい場合、その要素をポップアップし、length変数(どのプロセスを配置するかを示す変数)とindexをそれぞれ1増やし、100を超えないprogressに遭遇した場合、そのlengthをresponse listに追加することです.
想像していた真ん中に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関数を使用しました!ああ!問題を解くときにzip関数を使うとは思わなかった.zip関数を除いて、次の式...簡単に解けたみたいどんなに解いても、そうはいかないけど、もっと简単にできるように顽张りましょう.