[Programmers](python)キーボード-2020ココア実習を押す


質問する

キーは、中間キーボードを押したときのアルゴリズムを書くことです!

🧩 首都コード


番号を押すたびにその番号にリセット
左、右、中キーボードの条件をそれぞれ作成します.
中間キーボードを押すときに考慮すべき条件1.distance 2.hand

🏁 説明する

def solution(numbers, hand):
    answer = ''
    last_l = 10
    last_r = 12
    
    pad = [[1,4,7],[2,5,8],[3,6,9]]

    for num in numbers:
        if num in pad[0]: # Left
            answer += 'L'
            last_l = num
        elif num in pad[2]: # Right
            answer += 'R'
            last_r = num
        else: # Middle'
            num = 11 if num == 0 else num

            abs_l = abs(num-last_l) # 거리 계산하기 위해
            abs_r = abs(num-last_r)

            if sum(divmod(abs_l, 3)) > sum(divmod(abs_r, 3)):
                answer += 'R'
                last_r = num
            elif sum(divmod(abs_l, 3)) < sum(divmod(abs_r, 3)):
                answer += 'L'
                last_l = num
            else:
                if hand == 'left':
                    answer += 'L'
                    last_l = num
                else:
                    answer += 'R'
                    last_r = num
    return answer
answer = ''
last_l = 10
last_r = 12
pad = [[1,4,7],[2,5,8],[3,6,9]]
  • numbersリストで変数を処理し、その変数を上書きします.
    左手の親指の番号はlast lで、
    右手親指の番号はlast r,
  • padでキーボードを左、中、右に分けます.
  • for num in numbers:
    if num in pad[0]:
    answer += 'L'
    last_l = num
  • の数字が[1,4,7]の場合、
    答えに「L」をつける
    最後の数字は
  • です
    elif num in pad[2]:
    answer += 'R'
    last_r = num
  • の数字は[3,6,9]のとき、
    答えに「R」をつける
    最後の数字は
  • です
    else:
    num = 11 if num == 0 else num
    abs l=abs(num-last l)#距離計算
    abs_r = abs(num-last_r)
  • の数字は[2,5,8]のとき、
  • 「*」を10、0を11、「#」を12に設定

    📌 距離の計算

  • (|a-b|//3)+(|a-b|%3)(a-b)/3のシェア+(a-b)/3の残りの部分
    |a-b|
  • 変数に格納
    if sum(divmod(abs_l, 3)) > sum(divmod(abs_r, 3)):
    answer += 'R'
    last_r = num
  • (|a-b|//3) + (|a-b|%3)
    最後の左数字からの距離:sum(divmod(abs l,3)
    右上の数字からの距離:sum(divmod(abs r,3)
    左の最後の数字と新しい数字の距離がもっと大きいと
    もっと近い右手で+Rと答え、
    右上の数字で
  • を上書き
    elif sum(divmod(abs_l, 3)) < sum(divmod(abs_r, 3)):
    answer += 'L'
    last_l = num
  • 位と同じ
  • else:
    if hand == 'left':
    answer += 'L'
    last_l = num
    else:
    answer += 'R'
    last_r = num
    return answer
    条件文
  • (キーボードを押すときの2番目の条件)

    長い時間がかかった🥸 息を切らす