[ココア実習生]キーボード[2020ココア実習生-等級1]Python
3311 ワード
問題の説明
スマートフォンの電話キーボードの各スペースには、次の数字があります.
この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
1.親指は上下左右4方向にしか移動できず、キーボードを動かすセルの距離は1です.
2.左の列の3つの数字1、4、7を入力する場合は、左手親指を使用します.
3.右の列の3つの数字3、6、9を入力する場合は、右手親指を使用します.
4.中間列の数字2、5、8、0を4つ入力する場合は、2つの親指の現在のキーボード位置に近い親指を使用します.
4-1. 2つの親指の距離が等しい場合は、右利きは右手親指、左利きは左手親指を使用します.
solution関数を完了して順序番号を示す配列番号、左利きか右利きかを示す文字列番号をパラメータとすると、各番号の親指が左手か右手かを示す連続文字列形式で返されます.
[制限]
I/O例
I/O例説明
I/O例#1
順番は[1,3,4,5,8,2,4,5,9,5]、右利きです.
そこで、「LLLLLLRLL」に戻ります.
I/O例#2
左利きが[7,0,8,2,8,3,1,5,7,6,2]の順になると、使用する手は「LR」になります.
I/O例#3
右利きを[1,2,3,4,5,6,7,8,9,0]の順に押すと、使用する手が「LLRLRLL」に変わります.
コード#コード#
def solution(numbers, hand):
key_loc = [[3, 1], [0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] # keypad 좌표
left_loc, right_loc = [3, 0], [3, 2] # 맨 처음 시작 값은 왼손은 '*'위치 [3, 0] 오른손은 '#'위치 [3, 2]
answer = []
left_length, right_length = 0, 0
hand = 'L' if hand == 'left' else 'R'
for i in numbers:
now_key = key_loc[i]
if i in [1, 4, 7]: # 1, 4, 7
answer.append('L')
left_loc = now_key
elif i in [3, 6, 9]: # 3, 6, 9
answer.append('R')
right_loc = now_key
else: # 2, 5, 8, 0 (상, 하, 좌, 우의 길이를 비교해야 됨) 각 left_loc right_loc의 마지막 원소의 길이만 비교
left_length = abs(now_key[1] - left_loc[1]) + abs(now_key[0] - left_loc[0]) if left_loc else 0
right_length = abs(now_key[1] - right_loc[1]) + abs(now_key[0] - right_loc[0]) if right_loc else 0
if left_length < right_length: # 거리의 최솟값인 hand를 추가
answer.append('L')
left_loc = now_key
elif left_length > right_length:
answer.append('R')
right_loc = now_key
else: # 거리가 같은 경우
answer.append(hand)
if hand == 'L': left_loc = now_key
else: right_loc = now_key
return ''.join(answer)
実施のための式をメモ帳に書き込む
左側の現在のキーパッド2=>[0,1]右側の現在のキーパッド3=>[0,2]
移動するキーボード8=>[2,1]
|8行値-2行値|+|8列値-2列値|=2(オプション)
|8行値-3行値|+|8列値-3列値|=3
左側現在のキーパッド8=>[2,1]右側現在のキーパッド9=>[2,2]
移動するキーボード2=>[0,1]
|2行値-8行値|+|2列値-8列値|=2(オプション)
|2行値-9行値|+|2列値-9列値|=3
if |2 행값 - 8 행값| + |2 열값 - 8 열값| < |2 행값 - 9 행값| + |2 열값 - 9 열값|: answer.append('L')
elif |2 행값 - 8 행값| + |2 열값 - 8 열값| > |2 행값 - 9 행값| + |2 열값 - 9 열값|: answer.append('R')
else: # 거리가 같은 경우
if hand == 'left': answer.append('L')
else: answer.append('R')
Reference
この問題について([ココア実習生]キーボード[2020ココア実習生-等級1]Python), 我々は、より多くの情報をここで見つけました https://velog.io/@skrudfhr02/카카오-인턴-키패드-누르기-2020-카카오-인턴십-Level-1-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol