[Programmers]Greedy-Joycastic(Python)
出所Programmers符号化テストハイスコアスイート
JOYSTICでアルファベット名を完成最初はAのみで構成されていました
ex)完成する名前は3文字AAA、4文字AAAAAA
JOYロッドを各方向に移動し、以下のようにします.
nameはアルファベット大文字のみからなる. nameの長さは1以上20以下である.
namereturn"JEROEN"56"JAN"23
whileゲートで現在位置 ・ ・ 現在位置を見つけた位置に変換し、移動した分だけ答えを加算する.
Greedy:Joycastic[Lv2]
問題の説明
JOYSTICでアルファベット名を完成最初はAのみで構成されていました
ex)完成する名前は3文字AAA、4文字AAAAAA
JOYロッドを各方向に移動し、以下のようにします.
▲ - 다음 알파벳
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
▶ - 커서를 오른쪽으로 이동
たとえば、次の方法でJAZを作成できます.- 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다.
- 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다.
- 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다.
따라서 11번 이동시켜 "JAZ"를 만들 수 있고, 이때가 최소 이동입니다.
パラメータとして名前を作成する場合は、名前に対するJOYSTIC操作回数の最大値を返すソリューション関数を作成します.せいげんじょうけん
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を何回か上下に移動するように要求されている.index
0からalphabet_number
で取得した、JOYSTICを移動して必要なアルファベットにします.動いただけ答えるalphabet_number
では、現在のインデックス値が0であることを確認し、全員が0である.全員が0であれば、繰り返し文は離れます.alphabet_number
では,現在位置を基準として左,右それぞれ1マスずつ探索を行い,ゼロでない近元素を探索する.結果
Reference
この問題について([Programmers]Greedy-Joycastic(Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@deannn/Programmers-Greedy-조이스틱-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol