[プログラマー]スープ



📩 -->問題の説明


数え切れない、順序付けされた、またはある順序で並べられた要素の集合を「tuple」(tuple)と呼ぶ.n個の要素を有するtupleをn tupleと呼び、以下のように表すことができる.
  • (a1, a2, a3, ..., an)
  • Tupleには以下の性質があります.
    1.重複する要素がある可能性があります.ex : (2, 3, 1, 2)
    2.要素には一定の順序があり、要素の順序が異なる場合は、異なるトーンになります.ex : (1, 2, 3) ≠ (1, 3, 2)
    3.凡例の要素の数が限られている.
    要素の個数がnであり、重複する要素(a 1,a 2,a 3,...,an)がない場合(ただし、a 1,a 2,...,anは自然数)、集合記号「{」,「}」を用いて表すことができる.
  • {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}
  • 例えば、
  • (2、1、3、4)
    として表すことができます.
  • の場合、集合は要素の順序の影響を受けません.
    {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
    {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
    {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}
    同じ例(2、1、3、4)をすべて表します.
  • パラメータに特定のtupleを表す集合を含む文字列sが与えられた場合、解関数を完了し、sで表されるtupleを配列に戻します.

    せいげんじょうけん

  • sの長さは5以上100000以下である.
  • sは、数字と「{」、「}」、「,」のみで構成されています.
  • の数字は0で始まりません.
  • sは、繰り返し要素のないtupleを常に正確に表す.
  • sで表されるtupleの要素は100000より大きい自然数である.
  • 入力は、
  • を返す配列の長さが1または500未満の場合にのみ与えられます.
  • I/O例


    numbersreturn"{{2},{2,1},{2,1,3},{2,1,3,4}}"[2, 1, 3, 4]"{{1,2,3},{2,1},{1,2,4,3},{2}}"[2, 1, 3, 4]"{{20,111},{111}}"[111, 20]"{{123}}"[123]"{{4,2,3},{3},{2,3,4,1},{2,3}}"[3, 2, 4, 1]

    💡 ソリューション(使用言語:python)

    def solution(s):
        answer=''
        result=[]
        empty=[]
        for i in s[1:-1]:
            if i.isdigit():
                answer+=i
            else:
                if answer.isdigit():
                    empty.append(int(answer))
                    answer=''
                if i=='}':
                    result.append(list(empty))
                    empty=[]
        result=sorted(result, key=lambda x:len(x))[::-1]
    
        good=[]
        for i in range(len(result)):
            if i==len(result)-1:
                good.append(result[i][0])
            else:
                good.append(list(set(result[i])-set(result[i+1]))[0])
        return good[::-1]
        

    👉 説明:

  • 基本方式は以下のように{}を[]に置き換えます.
  • {{3,2,1}, {2,1}, {1} => [[3,2,1], [2,1], [1]]
  • で変更された値を、保存されたリスト結果の要素の長さに従って並べ替え、反転します.
  • [[3,2,1], [2,1], [1]]
  • i番目の要素では、i+1要素の集合の減算値をgood listに入れ、反転します.
  • =>setやsortは効率的に通れない問題が多いので、この問題を解くときも気になりますが...そのまま渡した

    結果



    別の解釈

    def solution(s):
        answer = []
    
        s1 = s.lstrip('{').rstrip('}').split('},{')
    
        new_s = []
        for i in s1:
            new_s.append(i.split(','))
    
        new_s.sort(key = len)
    
        for i in new_s:
            for j in range(len(i)):
                if int(i[j]) not in answer:
                    answer.append(int(i[j]))
    
        return answer
  • stripを使用して句読点を削除し、splitを使用してリストを作成します(splitはよく使われていますが、なぜ思い出せないのでしょうか...)
  • newに「,」で区切られた値を加えます.
  • の長さは順番に並べられています.
  • の答えの空のリストに値がない場合は、
  • を追加します.
  • のきれいな裁縫法のようです!!
  • 🌈 に感銘を与える


    莹の誕生日パーティーに行ってサインの結果を見て準備に時間がかかりました.すぐに解けそうな気がする.時間を無駄にした.
    ソース:プログラマ
    間違いがあればメッセージをお願いします🙂