[Programmers]Greedy-Joycastic(Python)


出所Programmers符号化テストハイスコアスイート

Greedy:Joycastic[Lv2]


問題の説明


JOYSTICでアルファベット名を完成最初はAのみで構成されていました
ex)完成する名前は3文字AAA、4文字AAAAAA
JOYロッドを各方向に移動し、以下のようにします.
▲ - 다음 알파벳
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
▶ - 커서를 오른쪽으로 이동
たとえば、次の方法でJAZを作成できます.
- 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다.
- 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다.
- 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다.
따라서 11번 이동시켜 "JAZ"를 만들 수 있고, 이때가 최소 이동입니다.
パラメータとして名前を作成する場合は、名前に対するJOYSTIC操作回数の最大値を返すソリューション関数を作成します.

せいげんじょうけん

  • nameはアルファベット大文字のみからなる.
  • nameの長さは1以上20以下である.
  • I/O例


    namereturn"JEROEN"56"JAN"23

    I/O例説明


     

    Solution


    説明する

    def solution(name):
        alphabet_number = [min(ord(i) - ord("A"), ord("Z") - ord(i)+1) for i in name]
        idx, answer = 0, 0
        while True:
            answer += alphabet_number[idx]
            alphabet_number[idx] = 0
            if not any(alphabet_number):
                break
            lt, rt = 1, 1
            while alphabet_number[idx - lt] == 0:
                lt += 1
            while alphabet_number[idx + rt] == 0:
                rt += 1
            if lt < rt:
                answer += lt
                idx -= lt
            else:
                answer += rt
                idx += rt
    
        return answer
    
  • alphabet_numberリストでは、位置ごとのアルファベットによって、JOYSTICを何回か上下に移動するように要求されている.
  • index0から
  • whileゲートで現在位置alphabet_numberで取得した、JOYSTICを移動して必要なアルファベットにします.動いただけ答える
  • alphabet_numberでは、現在のインデックス値が0であることを確認し、全員が0である.全員が0であれば、繰り返し文は離れます.
  • alphabet_numberでは,現在位置を基準として左,右それぞれ1マスずつ探索を行い,ゼロでない近元素を探索する.
  • 現在位置を見つけた位置に変換し、移動した分だけ答えを加算する.
  • 結果