キーボードを押す


私が作成したコード:
def solution(numbers, hand):
    answer = ''
    tmpL=''
    tmpR=''
    for x in numbers:
        if x in (1, 4, 7):
            answer+=L
        elif x in (3, 6, 9):
            answer+=R
        else:
難しすぎます...
各数字をリストにマッピングし、ディクシャナを形成します.
計算距離:A(a 1,a 2),B(b 1,b 2)の2点,ABの距離(長さ)を求めると(b 1−a 1)^2+(b 2−a 2)^2を求める.
2番目に私が書いたコード:
def solution(numbers, hand):
    answer = ''
    dict={1:[0,0], 2:[0,1], 3:[0,2], 4:[1,0], 5:[1,1], 6:[1,2], 7:[2,0], 8:[2,1], 9:[2,2], '*':[3,0], 0:[3,1], '#':[3,2]}
    lastL=dict['*']
    lastR=dict['#']
    for x in numbers: #key로 value얻는법 함수:get()
        if x in (1, 4, 7):
            answer+='L'
            lastL=dict.get(x)
        elif x in (3, 6, 9):
            answer+='R'
            lastR=dict.get(x)
        else:
            a=dict.get(x)
            if ((a[0]-lastL[0])**2)+((a[1]-lastL[1])**2)==((a[0]-lastR[0])**2)+((a[1]-lastR[1])**2):
                if hand=="left":
                    answer+='L'
                    lastL=dict.get(x)
                else:
                    answer+='R'
                    lastR=dict.get(x)
            elif ((a[0]-lastL[0])**2)+((a[1]-lastL[1])**2)<((a[0]-lastR[0])**2)+((a[1]-lastR[1])**2):
                answer+='L'
                lastL=dict.get(x)
            else:
                answer+='R'
                lastR=dict.get(x)
            
    return answer
テストケースは13~20回不合格.
ピタゴラスでは解けません
->x移動量とy移動量の合計のみで距離を測定します.
押す数字が8なので左手が4右手が2右手が右利きの場合に問題が発生します
質問で与えられた距離で計算すると、左手と右手の距離が8から「2」なので右手で押しますが、座標を置いて距離で計算するだけなら左手で押します.

ソリューション:
x移動量、y移動量はどのように求めますか?
思ったより簡単だったなぁ~
def solution(numbers, hand):
    answer = ''
    dict={1:[0,0], 2:[0,1], 3:[0,2], 4:[1,0], 5:[1,1], 6:[1,2], 7:[2,0], 8:[2,1], 9:[2,2], '*':[3,0], 0:[3,1], '#':[3,2]}
    lastL=dict['*']
    lastR=dict['#']
    for x in numbers: #key로 value얻는법 함수:get()
        if x in (1, 4, 7):
            answer+='L'
            lastL=dict.get(x)
        elif x in (3, 6, 9):
            answer+='R'
            lastR=dict.get(x)
        else: #여기 구하는게 관건.
            a=dict.get(x)
            if (abs(a[0]-lastL[0]))+(abs(a[1]-lastL[1]))==(abs(a[0]-lastR[0]))+(abs(a[1]-lastR[1])):
                if hand=="left":
                    answer+='L'
                    lastL=dict.get(x)
                else:
                    answer+='R'
                    lastR=dict.get(x)
            elif (abs(a[0]-lastL[0]))+(abs(a[1]-lastL[1]))<(abs(a[0]-lastR[0]))+(abs(a[1]-lastR[1])):
                answer+='L'
                lastL=dict.get(x)
            else:
                answer+='R'
                lastR=dict.get(x)
            
    return answer
终わります!
知っておきたいのは、
ディック・シャナリーの価値に近づくには2つの方法があります
1) dict['*']2)dict.get('*') get関数を使用します.
1つの違いは、1つ目のキーが存在しないキーを使用して値を取得しようとするとエラーが発生し、2つ目はnoneを返します.