プログラマー:キーボードを押す(2020ココア実習)
29889 ワード
質問する
100/100
1時間10分
キーボードの左側の線は左手、右側の線は右手です.
中間で対応する距離を計算し、近い方向に行い、両者が同じであれば手作業で並べて適用します.
の真ん中の時
1)差が正の場合
2)差が負数の場合
3)差が0の場合=>hand[0]が「r」の場合とhand[0]が「l」の場合の 左時 右時
100/100
1時間10分
基本内容
キーボードの左側の線は左手、右側の線は右手です.
中間で対応する距離を計算し、近い方向に行い、両者が同じであれば手作業で並べて適用します.
コード#コード#
function solution(numbers, hand) {
let phone = [[1,2,3],[4,5,6],[7,8,9],['*',0,'#']];
let rRight = 3 , cRight = 2 , rLeft = 3, cLeft= 0;
let result = numbers.map(val=>{
if(val%3 == 2 || val==0){
let re;
phone.map((arr,i)=>{
arr.map((x,j)=>{
if(val == x){
let dif = (Math.abs((rRight-i)) + Math.abs((cRight-j))) - (Math.abs((rLeft-i)) + Math.abs((cLeft-j)))
console.log(dif)
if(dif > 0){ //L
rLeft = i;
cLeft = j;
re = 'L';
}
else if(dif < 0){ //R
rRight = i;
cRight = j;
re = 'R';
}
else{ //
if(hand[0] == 'r'){
rRight = i;
cRight = j;
}
else{
rLeft = i;
cLeft = j;
}
re = hand[0].toUpperCase();
}
}
})
})
return re;
}
else if(val%3 == 1){
phone.map((arr,i)=>{
arr.map((x,j)=>{
if(val == x){
rLeft = i;
cLeft = j;
}
})
})
return 'L';
}
else if(val%3 == 0){
phone.map((arr,i)=>{
arr.map((x,j)=>{
if(val == x){
rRight = i;
cRight = j;
}
})
})
return 'R';
}
})
return result.join('')
}
1)差が正の場合
2)差が負数の場合
3)差が0の場合=>hand[0]が「r」の場合とhand[0]が「l」の場合の
phone.map((arr,i)=>{
arr.map((x,j)=>{
if(val == x){
...
}
})
})
上記の構成は、対応するi,jの値valがxに等しい場合に適用されることが多い.コードの簡略化
function returnLeft(i,j){
return [i,j,'L']
}
function returnRight(i,j){
return [i,j,'R']
}
function solution(numbers, hand) {
let phone = [[1,2,3],[4,5,6],[7,8,9],['*',0,'#']];
let rRight = 3 , cRight = 2 , rLeft = 3, cLeft= 0;
let result = numbers.map(val=>{
let num;
if(val%3 == 2 || val==0) //중간 위치 번호라면
{
phone.map((arr,i)=>{
arr.map((x,j)=>{
if(val == x){
let dif = (Math.abs((rRight-i)) + Math.abs((cRight-j))) - (Math.abs((rLeft-i)) + Math.abs((cLeft-j)))
if(dif > 0)[rLeft,cLeft,num] = returnLeft(i,j)
else if(dif < 0)[rRight,cRight,num] = returnRight(i,j)
else{
if(hand[0] == 'l')[rLeft,cLeft,num] = returnLeft(i,j)
else[rRight,cRight,num] = returnRight(i,j)
}
}
})
})
return num;
}
else if(val%3 == 1){
phone.map((arr,i)=>{
arr.map((x,j)=>{
if(val == x)[rLeft,cLeft,num] = returnLeft(i,j)
})
})
return num;
}
else if(val%3 == 0){
phone.map((arr,i)=>{
arr.map((x,j)=>{
if(val == x)[rRight,cRight,num] = returnRight(i,j)
})
})
return num;
}
})
return result.join('')
}
重複する部分をreturnLeftとreturnRight関数に変えた.Reference
この問題について(プログラマー:キーボードを押す(2020ココア実習)), 我々は、より多くの情報をここで見つけました https://velog.io/@khw970421/프로그래머스-키패드-누르기-2020-카카오-인턴십テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol