コーディングテスト練習-機能開発


コーディングテスト練習-機能開発
機能改善作業を行っています.導入ごとにどのくらいの機能があるかを、作業の進捗と速度で把握します.

#エラーコード


事前に仕事ごとに数日かかる時間を時間に貯めておく.標準時間と残り時間を比較すると、前のタスクよりも少ないタスクが前のタスクとともに割り当てられます.差分値に基づいてカウントし、配置された機能数に基づいてインデックスを移動します.私は理論的に理解したが、コードがはっきりせず、ずっと間違っていた.
精度0.0:タイムアウトと失敗.(間違いだらけ)
import math

def solution(progresses, speeds):
    for i in range(len(progresses)):
        days = 0
        days = math.ceil((100-progresses[i]) / speeds[i])
        times.append(days)
    print(times)
    
  while True:
    if idx+2 >= len(times):
        functions = len(times) - idx
        idx += functions
        functions = 1
        break
    for i in times[idx+1:]:
      if times[idx] <= i:
        functions = times.index(i,idx+1) - idx
        idx += functions
        functions = 1
        break
      functions += 1


            
    
    return distribution
    

#正解コード


何日かやっていましたが、ダメだったのでヒントを探しましたが、私が考えていた方法と同じでした.異なる点は,一部の配列を切り取り,再複文を回転させるのではなく,ゼロから順に回転させることである.考えが複雑すぎて、繰り返しの文がうまくできないようです.
2つのflagを作成し、1つは順番に回転し、もう1つは差で移動し、1回転するだけで問題を解決します.
import math

def solution(progresses, speeds):

    times = []
    answer = []
    front = 0
    
    for i in range(len(progresses)):
        days = 0
        days = math.ceil((100-progresses[i]) / speeds[i])
        times.append(days)
    print(times)
    
    for idx in range(len(times)):
        if times[idx] > times[front]:  
            answer.append(idx - front)
            front = idx 
    answer.append(len(times) - front) 
    
    return answer

#参照コード


queueコンセプトを用いて,先頭のタスクからpop()を開始する.time変数を使用すると、前の作業に必要な時間を等しく演算し、countを増加させることができます.
def solution(progresses, speeds):
    answer = []
    time = 0
    count = 0
    while len(progresses)> 0:
        if (progresses[0] + time*speeds[0]) >= 100:
            progresses.pop(0)
            speeds.pop(0)
            count += 1
        else:
            if count > 0:
                answer.append(count)
                count = 0
            time += 1
    answer.append(count)
    return answer