開発プログラマーコードテスト高得点Kit Stack/Cu機能


質問の表示 👈 クリック!

💡 に答える


解✔方法


progression q=未完了の機能(キューリソース構造)
speed q=未完了機能の速度(キューデータ構造)
機能がすべて完了するまで、毎日1日増やして、前の機能が完了しているかどうかを確認します.
機能が完了した場合は、その機能と速度をキューから削除し、数をカウントします.しかし、この場合、1日は増えません.
機能が完了していない場合は、カウントが0より大きい場合に答えに追加し、0に再初期化します.count個数に関係なく、いつも1日増えます.
インプリメンテーションコード👇
from collections import deque
def solution(progresses, speeds):
    answer = []
    day, cnt = 1, 0
    progress_q, speed_q = deque(progresses), deque(speeds)
    while progress_q:
        if progress_q[0] + speed_q[0] * day >= 100:
            progress_q.popleft()
            speed_q.popleft()
            cnt += 1
        else:
            if cnt: 
                answer.append(cnt)
                cnt = 0
            day += 1
    answer.append(cnt)
            
    return answer

✔異なる解法


Q=[[機能を完了するのに必要な日数、その日数で完了する機能の数],...]として定義されます.
zip関数を使用して、機能と機能の速度を順番にポップアップします.
取り出した機能と速度を用いて,その機能を完了するのに要する日数を求める.
この日数が前の機能を完了するのに必要な日数よりも大きい場合は、Qに[必要な日数、1]を追加します.
小さいときは、前の機能を完成させるのに必要な日数を1つ増やします.
当日完了した機能の数だけを返します.
インプリメンテーションコード👇
def solution(progresses, speeds):
    
    Q = []
    for progress, speed in zip(progresses, speeds):
        if not Q or Q[-1][0] < -((progress - 100) // speed):
            Q.append([-((progress - 100) // speed), 1])
        else:
            Q[-1][1] += 1
            
    return [q[1] for q in Q]