[Programmers/CodingTest/Python]JOYSTIC
5346 ワード
問題の説明
JOYSTICでアルファベット名を完成最初はAのみで構成されていました
ex)完成する名前は3文字AAA、4文字AAAAAA
JOYロッドを各方向に移動し、以下のようにします.▲ - 다음 알파벳
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서)
たとえば、次の方法でJAZを作成できます.- 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다.
- 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다.
- 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다.
따라서 11번 이동시켜 "JAZ"를 만들 수 있고, 이때가 최소 이동입니다.
パラメータとして名前を作成する場合は、名前に対するJOYSTIC操作回数の最大値を返すソリューション関数を作成します.
せいげんじょうけん
▲ - 다음 알파벳
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서)
- 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다.
- 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다.
- 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다.
따라서 11번 이동시켜 "JAZ"를 만들 수 있고, 이때가 최소 이동입니다.
I/O例
name return
"JEROEN" 56
"JAN" 23
方法
この問題はGRADYアルゴリズムに分類される.最初は状況全体を探るべきだと思っていましたが、グリディに分かれている以上、グリディで説明することにしました.まず、アルファベットを必要なアルファベットに変換する最小回数.重要なのは、whileゲートを介して変更された回数リストを巡回し、右側と左側の0ではなく、より速い方向に座標を移動する次の方向を見つけることです.
グリディアルゴリズムは当時の状況での最適選択アルゴリズムであり、常に最適値が見つからない場合があり、この問題では常に最適値を見つけることが要求されている.GRADY方式で正解を得るのは難しいと判断し、74.1点で終了した.
solution.py def solution(name):
answer = 0
press_button=[min(ord(word)-ord("A"), ord("Z")-ord(word)+1) for word in name]
cur=0
while True:
answer+=press_button[cur]
press_button[cur]=0
l, r=1, 1
if press_button==[0]*len(name):
break
while press_button[cur-l]==0:
l+=1
while press_button[cur+r]==0:
r+=1
if r>l:
answer+=l
cur=(cur-l)
else:
answer+=r
cur=(cur+r)
return answer
Reference
この問題について([Programmers/CodingTest/Python]JOYSTIC), 我々は、より多くの情報をここで見つけました
https://velog.io/@xx0hn/Programmers-CodingTest-Python-조이스틱
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def solution(name):
answer = 0
press_button=[min(ord(word)-ord("A"), ord("Z")-ord(word)+1) for word in name]
cur=0
while True:
answer+=press_button[cur]
press_button[cur]=0
l, r=1, 1
if press_button==[0]*len(name):
break
while press_button[cur-l]==0:
l+=1
while press_button[cur+r]==0:
r+=1
if r>l:
answer+=l
cur=(cur-l)
else:
answer+=r
cur=(cur+r)
return answer
Reference
この問題について([Programmers/CodingTest/Python]JOYSTIC), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/Programmers-CodingTest-Python-조이스틱テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol