開発プログラム機能(Lv 2)

2641 ワード

質問する


https://programmers.co.kr/learn/courses/30/lessons/42586

イニシャルコード

def solution(progresses, speeds):
    answer = []
    arr = []
    
    for i in range(len(progresses)):
        arr.append((100 - progresses[i]) // speeds[i])
    
    for i in range(len(arr)-1):
        if arr[i] > arr[i+1]:
            arr[i+1] = arr[i]
            
    d = {}
    
    for i in arr:
        if i in d:
            d[i] += 1
        
        else:
            d[i] = 1
            
    answer = list(d.values())
    return answer            

初期結果



私はdictのvalue値だけをテストしてリストに変えて、すぐにsushヒューと書きました.
一つは何だったっけ?
一般的にこの場合、極端な例は不可能なので、問題を読んで、最も極端な状況を頭に戻すように努力します!

ずれ


すぐに見つかると思ったけど、思ったより間違った場所を探すのが長かった
残りの作業量を作業速度で割った値は常に分離されていると考えられるため,コードを記述した.
    for i in range(len(progresses)):
        if (100-progresses[i]) % speeds[i] == 0 :
            arr.append((100 - progresses[i]) // speeds[i])
        else :
            arr.append((100 - progresses[i]) // speeds[i] + 1)
だからこの部分を修正しました.
分けない時は分+1
実際、これは特定のケースを漏らすのではなく、完全に間違った論理で書かれたコードです.
幸いなことに、1つを除いて、残りのテストケースに合格したようです.
だから逆に間違ったものを見つけるのに長い時間がかかったような気がします...
テスト用例は1~2個入っていますが、残りは間違っていても何も言えません!

正解

def solution(progresses, speeds):
    answer = []
    arr = []
    
    for i in range(len(progresses)):
        if (100-progresses[i]) % speeds[i] == 0 :
            arr.append((100 - progresses[i]) // speeds[i])
        else :
            arr.append((100 - progresses[i]) // speeds[i] + 1)
            
    
    for i in range(len(arr)-1):
        if arr[i] > arr[i+1]:
            arr[i+1] = arr[i]
            
    d = {}
    
    for i in arr:
        if i in d:
            d[i] += 1
        
        else:
            d[i] = 1
            
    answer = list(d.values())
    return answer            

新学の部分

d = {} 혹은 d = dict()
こんなdという辞書があったとき
answer = list(d.values())
values()メソッドを使用してdictionaryのvalues値のみを読み込むことができます.
リストにしたいならリスト()でもう一回縛ります!
keys()メソッドも似たようなものです.
value値ではなくキー値からなるリストを作成する場合は、
list(d.keys())
こうすれば踊れる!!
終わりだ!