[Programmers]-ダーツゲーム


1. Problem 📃


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


次の問題は、与えられた条件に基づいて結果値をエクスポートすることです.

2. Logic 👨‍🏫

  • パラメータで入力された値がS,D,Tであればindex(初期値のみ0)とi-1の値が数字であることを利用してpow関数を用いて計算し、tmpというリストに追加します.
  • とindexは現在i値
  • を保存している.
  • パラメータの値を*と入力すると、tmpリストの最後の値が2倍になります.
  • とtmpリストに2つ以上の値がある場合、前の値も2倍になります.
  • パラメータの値を#と入力すると、tmpの最後の値は-1倍になります.
  • tmpのすべての値を加算して返します.
  • 3. Code 💻


    1.私が解いたパスワード

    def solution(dartResult):
        answer = 0
        index = 0
        tmp = []
        for i, v in enumerate(dartResult):
            if (v == 'S' or v == 'D' or v == 'T'):
                if v == 'S':
                    tmp.append(pow(int(dartResult[index:i]), 1))
                elif v == 'D':
                    tmp.append(pow(int(dartResult[index:i]), 2))
                elif v == 'T':
                    tmp.append(pow(int(dartResult[index:i]), 3))
                index = i + 1
            if v == '*':
                tmp[len(tmp)-1] *= 2
                if len(tmp) > 1 and tmp[len(tmp)-2] in tmp:
                    tmp[len(tmp)-2] *= 2 
                index = i + 1
            if v == '#':
                tmp[len(tmp)-1] *= -1
                index = i + 1
        answer = sum(tmp)
        return answer

    2.他人が解いたパスワード

    import re
    
    
    def solution(dartResult):
        bonus = {'S' : 1, 'D' : 2, 'T' : 3}
        option = {'' : 1, '*' : 2, '#' : -1}
        p = re.compile('(\d+)([SDT])([*#]?)')
        dart = p.findall(dartResult)
        for i in range(len(dart)):
            if dart[i][2] == '*' and i > 0:
                dart[i-1] *= 2
            dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]
    
        answer = sum(dart)
        return answer

    4. Feedback 📚


    他の人がどのように解いたのか調べた結果、きれいに解いた人の中で、正規表現で解決したコードに触れました.だから私も時間をかけて正規表現を知りたいです.

    1.reモジュール


    -Phythonは、re(正規表現の略)モジュールを提供し、正規表現をサポートします.reモジュールはPythonのインストール時に自動的にインストールされる基本ライブラリで、使用方法は以下の通りです.
    import re
    p = re.compile('ab*')