[プログラマー]キーボード/67256回/python/2020ココア実習


💡質問する


スマートフォンの電話キーボードの各スペースには、次の数字があります.

この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
  • 親指は上下左右4方向にしか移動できず、キーボードを動かすセル距離は1です.
  • 左側の列の3つの数字1、4、7を入力する場合は、左手親指を使用してください.
  • 右側の列の3つの数字3、6、9を入力する場合は、右手親指を使用してください.
  • の4つの数字2、5、8、0を入力する場合は、2つの親指の現在のキーボード位置に近い親指を使用します.
    4-1. 2つの親指の距離が等しい場合は、右利きは右手親指、左利きは左手親指を使用します.
    solution関数を完了して順序番号を示す配列番号、左利きか右利きかを示す文字列番号をパラメータとすると、各番号の親指が左手か右手かを示す連続文字列形式で返されます.
  • せいげんじょうけん

  • numbers配列のサイズは1000を超えません.
  • numbers配列要素の値は0または9以下の整数です.
  • 手は「左」または「右」です.
  • 「左」は左利き、「右」は右利きを表す.
  • 左手親指を使用する場合はL、右手親指を使用する場合はRとなり、順番に接続され、文字列形式で返されます.

    にゅうしゅつりょく


    numbershandresult[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):
        answer = ''
        # 1  2  3
        # 4  5  6     
        # 7  8  9   
        # 10 11 12      
        keypad={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),
                10:(3,0),0:(3,1),12:(3,2)
               }
        beforeL,beforeR=10,12
        for n in numbers:
            if n in (1,4,7):
                answer+='L'
                beforeL=n
            elif n in (3,6,9):
                answer+='R'
                beforeR=n
            elif n in (2,5,8,0):
                left=abs(keypad[n][0]-keypad[beforeL][0])+abs(keypad[n][1]-keypad[beforeL][1])
                right=abs(keypad[n][0]-keypad[beforeR][0])+abs(keypad[n][1]-keypad[beforeR][1])
                if left<right:
                    answer+="L"
                    beforeL=n
                elif right<left:
                    answer+='R'
                    beforeR=n
                else:
                    if hand=="right":
                        answer+="R"
                        beforeR=n
                    else:
                        answer+='L'
                        beforeL=n
        return answer
    質問元:https://programmers.co.kr/learn/courses/30/lessons/67256