プログラマスキルツリー(Lv 2)

2553 ワード

質問する


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

説明する

def solution(skill, skill_trees):
    answer = 0
    
    d = {"A":99,"B":99,"C":99,"D":99,"E":99,"F":99,"G":99,"H":99,"I":99,"J":99,"K":99,"L":99,"M":99,"N":99,"O":99,"P":99,"Q":99, "R":99, "S":99, "T":99,"U":99,"V":99,"W":99,"X":99,"Y":99,"Z":99}
    
    order = 1
    
    for i in skill:
        d[i] = order
        order += 1
    
    for i in skill_trees:
        arr = list(i)
        check = True
        current = 1
        
        for j in range(len(arr)):
            if d[arr[j]] == current:
                current += 1

            else:
                if d[arr[j]] != 99:
                    check = False
                    break
                
                
        if check == True:
            answer += 1
            
    
    return answer 

結果



別の解釈

def solution(skill, skill_trees):
    answer = 0

    for skills in skill_trees:
        skill_list = list(skill)

        for s in skills:
            if s in skill:
                if s != skill_list.pop(0):
                    break
        else:
            answer += 1

    return answer

整理する


skill回転skill treesで比較してみました
もう一人はskill trees変換skillで比較します
長さが20以下の配列なので、時間の複雑さは十分に高いので、質問で与えられたように非常に正直に表現できましたが、他の解答のように、skill treesを前面から見ると、skillの最初の値に比べて、スキルシーケンスdictを別途作る必要はありません!
他の人のコードはもっと短いですが、dictも時間の複雑さもO(1)なので、私のコードも速いと思いますので、両方回って時間を比較しましょう!

ソースは縮小されましたが、ソリューション1は私のソリューションであり、ソリューション2は異なるソリューションです.
もうすぐ終わる仕事なので10万回回りました.
時間差は平均の2~3倍くらい!
私はずっと時間差が一番小さいものをネットにアップロードしたいと思っていましたが、役に立たなかったです.メフサイコロ44感性
ああ...さっき2倍の差があった時に直接カットすればよかったのに

新学


変換文字列-->配列

a = "hello"
list_a = list(a)
list_a    // ['h','e','l','l','o']
セパレータまたは特定のセパレータを>a.split()に何度も変換してみました.
バケツに変換したことがないので探しました.
直接リストで髪を結べばいい!
勉強終わり!