プログラマ別キーボード(Java、Java)
16613 ワード
今回解決した問題.
プログラマのキーボードを押します.
📕 提问链接
プログラマのキーボードを押します.
📕 提问链接
❗¥コード 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軸の間の移動経路を求めることができるので、これらの値を比較することで距離を決めることができます.
📜 ポスト
ピタゴラス式を用いて式を記述し,直線距離の反例を発見し,式を変えた.
Reference
この問題について(プログラマ別キーボード(Java、Java)), 我々は、より多くの情報をここで見つけました
https://velog.io/@jh5253/프로그래머스-키패드-누르기-Java자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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軸の間の移動経路を求めることができるので、これらの値を比較することで距離を決めることができます.
📜 ポスト
ピタゴラス式を用いて式を記述し,直線距離の反例を発見し,式を変えた.
Reference
この問題について(プログラマ別キーボード(Java、Java)), 我々は、より多くの情報をここで見つけました
https://velog.io/@jh5253/프로그래머스-키패드-누르기-Java자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
ピタゴラス式を用いて式を記述し,直線距離の反例を発見し,式を変えた.
Reference
この問題について(プログラマ別キーボード(Java、Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@jh5253/프로그래머스-키패드-누르기-Java자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol