プログラマ別キーボード(Java、Java)


今回解決した問題.
プログラマのキーボードを押します.

📕 提问链接


❗¥コード

import java.util.*;
class Pad
{
    int x,y;
    
    public Pad(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}
class Solution {
    static Pad left,right;
    public String solution(int[] numbers, String hand) {
        Pad [] pad = new Pad[10];
        left = new Pad(3,0);
        right = new Pad(3,2);
        
        int tmpNum = 1;
        for(int i = 0; i < 3; ++i)
        {
            for(int j = 0; j < 3; ++j)
            {
                pad[tmpNum++] = new Pad(i,j);
            }
        }
        pad[0] = new Pad(3,1);
        
        StringBuilder sb = new StringBuilder();
        for(int number : numbers)
        {
            if(number == 1 || number == 4 || number == 7)
            {
                sb.append("L");
                left.x = pad[number].x;
                left.y = pad[number].y;
                continue;
            }
            else if(number == 3 || number == 6 || number == 9)
            {
                sb.append("R");
                right.x = pad[number].x;
                right.y = pad[number].y;
                continue;
            }
            else
            {
                int fromLeft = Math.abs(left.x - pad[number].x) + Math.abs(left.y - pad[number].y);
                int fromRight = Math.abs(right.x - pad[number].x) + Math.abs(right.y - pad[number].y);
                if(fromLeft > fromRight)
                {
                    sb.append("R");
                    right.x = pad[number].x;
                    right.y = pad[number].y;
                }
                else if(fromLeft < fromRight)
                {
                    sb.append("L");
                    left.x = pad[number].x;
                    left.y = pad[number].y;
                }
                else
                {
                    if(hand.equals("left"))
                    {
                        sb.append("L");
                        left.x = pad[number].x;
                        left.y = pad[number].y;
                    }
                    else
                    {
                        sb.append("R");
                        right.x = pad[number].x;
                        right.y = pad[number].y;
                    }
                }
            }
        }
        return sb.toString();
    }
}

📝 に答える


これはKakao実習期間の出題です
pad配列のインデックスは対応する番号であり,各番号には独自の座標値がある.指定した数値配列をナビゲートし、2、5、8、0の場合、現在の指からの距離を計算します.座標値の違いごとにベンド値を追加すると、直線経路ではなくx軸とy軸の間の移動経路を求めることができるので、これらの値を比較することで距離を決めることができます.

📜 ポスト


ピタゴラス式を用いて式を記述し,直線距離の反例を発見し,式を変えた.