[アルゴリズム]キーボードを押す
プログラマー2020ココア実習生コードテストにおける問題
キーボード押下の問題
ぶんせき
問題を理解しながらも、どう実現すればいいのか悩んだ.
各番号の位置をx,y上の位置として表すことで,中央列を押す際に距離を容易に算出できる.
1.携帯電話の配列を実現
各番号に合った場所が保存されています.*、#から始まります.
phone = [[3,1],[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2]]
赤の丸、左手の青の丸は右手、黄色の丸は番号2.中央欄をクリックして手を近づける
左手は押す番号と2の距離、右手は押す番号と2の距離です.
コード#コード#
def check(pos1, pos2):
return abs(pos1[0]-pos2[0])+abs(pos1[1]-pos2[1])
def solution(numbers, hand):
answer = ''
phone = [[3,1],[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2]]
left, right = [3,0],[3,2]
for i in numbers:
if i in [1,4,7]:
left = phone[i]
answer+='L'
elif i in [3,6,9]:
right = phone[i]
answer+='R'
elif i in [2,5,8,0]:
leftCnt = check(left, phone[i])
rightCnt = check(right, phone[i])
if leftCnt>rightCnt:
right = phone[i]
answer+='R'
elif leftCnt<rightCnt:
left = phone[i]
answer+='L'
else:
if hand=="right":
right = phone[i]
answer+='R'
else:
left = phone[i]
answer+='L'
return answer
Reference
この問題について([アルゴリズム]キーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@akffhaos95/알고리즘-키패드-누르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol