Programmers Coding Quiz#24[ココア]キーボードを押す
11484 ワード
問題の説明
スマートフォンの電話キーボードの各スペースには、次の数字があります.
この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
4-1. 2つの親指の距離が等しい場合は、右利きは右手親指、左利きは左手親指を使用します.
せいげんじょうけん
△「左」は左利き、「右」は右利き.
I/O例
numbershandreturn[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]"right""LRLLLRLLRRL"[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]"left""LRLLRRLLLRR"[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]"right""LLRLLRLLRL"
に答える
def solution(numbers, hand):
left_side = (1,4,7) #이 숫자들은 무조건 왼손
right_side = (3,6,9) #이 숫자들은 무조건 오른손
left_pointer = '*' #왼손 마지막 위치
right_pointer = '#' #오른손 마지막 위치
#번호에 따른 좌표값(x축,y축)
matrix = {'*':(0,0), 0:(1,0), '#':(2,0), 7:(0,1), 8:(1,1), 9:(2,1),
4:(0,2), 5:(1,2), 6:(2,2), 1:(0,3), 2:(1,3), 3:(2,3)}
result = ''
for v in numbers:
if v in left_side:
left_pointer = v
result += 'L'
elif v in right_side:
right_pointer = v
result += 'R'
else:
place = matrix[v]
left = matrix[left_pointer]
right = matrix[right_pointer]
left_to_place_distance = abs(place[0]-left[0]) + abs(place[1]-left[1])
right_to_place_distance = abs(place[0]-right[0]) + abs(place[1]-right[1])
if left_to_place_distance > right_to_place_distance:
right_pointer = v
result += 'R'
elif left_to_place_distance < right_to_place_distance:
left_pointer = v
result += 'L'
else:
if hand == 'left':
left_pointer = v
result += 'L'
else:
right_pointer = v
result += 'R'
return result
1,4,7
必ず左手/24579142必ず右手で押す数字条件文では、どちらの場合もLまたはRを付けなければなりません.最後の位置情報を保存します.3,6,9
は、左手と右手の最後の位置情報と現在の番号の座標との距離を計算することによって判別しなければならない.マイナス記号を実行すると、-1が発生しても距離は1だけなので、絶対値として計算されます.x軸y軸の差分値にright to place distance(右手の現在座標と現在番号座標の位置)を大きくすると、左手と右手の間に値が追加され、位置情報が保存されます.
両手の位置座標が現在の番号の位置座標と同じであれば、問題の条件のように、左か右かを判別して位置座標を追加し、位置情報を保存します.
後記:推薦数が最も高い模範的な答えが私によく似ていることに驚きました.まあまあですが、真ん中にディック・シャナリーが座標を間違えたので、長い間シャベルを引いていました・・・時々問題は論理ではなく、私の指です.
Reference
この問題について(Programmers Coding Quiz#24[ココア]キーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@keywookim/Programmers-Coding-Quiz-24-카카오키패드-누르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol