プログラマLv 1-キーボードを押す
コード#コード#
function solution(numbers, hand) {
var answer = '';
let leftX = 0, leftY = 3, rightX = 2, rightY = 3;
let positionX = [1,0,1,2,0,1,2,0,1,2];
let positionY = [3,0,0,0,1,1,1,2,2,2];
function moveLeft(num) {
answer +="L";
leftX = positionX[num];
leftY = positionY[num];
}
function moveRight(num) {
answer +="R";
rightX = positionX[num];
rightY = positionY[num];
}
numbers.forEach((num) =>{
if(num === 1 || num === 4 || num === 7) {
moveLeft(num)
} else if(num === 3 || num === 6 || num === 9) {
moveRight(num)
} else {
const distanceL = Math.abs(positionX[num] - leftX) + Math.abs(positionY[num] -leftY);
const distanceR = Math.abs(positionX[num] - rightX) + Math.abs(positionY[num] -rightY);
if(distanceL < distanceR) {
moveLeft(num)
} else if(distanceL > distanceR) {
moveRight(num)
} else {
if(hand === 'left') {
moveLeft(num)
} else {
moveRight(num)
}
}
}
});
return answer;
}
解答と感想
これは以前Kakao実習を申請した時に解決した問題です.その時も座標で解いたようで、その時はすべてifで処理されていたようです.各番号に座標値
positionX,Y
変数を与え、現在left
・right
の座標から距離を算出する.今のコードはifを処理する時より良いと思います.🤔 一番いいかどうか分かりません.Reference
この問題について(プログラマLv 1-キーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@cookncoding/프로그래머스Lv1-키패드-누르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol