2020.11.02
출처 : 프로그래머스
📝문제
소요시간 : 1시간 13분 40초
[
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
](https://programmers.co.kr/learn/courses/30/lessons/67256)
✏️해답
function solution(numbers, hand) {
let answer = '';
let L=[4,1];
let R=[4,3];
/// 1. numbers 만큼 for문을 돌린다.
for(let i=0;i<numbers.length;i++){
/// 2. 1,4,7이 나오면 L
if(numbers[i]==1 || numbers[i]==4 || numbers[i]==7){
answer+='L';
numbers[i]==1 ? L=[1,1] : (numbers[i]==4? L=[2,1]:L=[3,1]);
}
/// 3. 3,6,9면 R
else if(numbers[i]==3 || numbers[i]==6 || numbers[i]==9){
answer+='R';
numbers[i]==3 ? R=[1,3] :(numbers[i]==6?R=[2,3]:R=[3,3]);
}
/// 4. 2,5,8,0은 L과 R을 기록한다.
/// 5. 2,5,8,0은 L과 R중에 가까이 있는것을 추가.
/// 6. 왼손잡이/오른손 잡이인지도 구분.
else{
if(numbers[i]==2){
/// R이 가까운 경우
if((Math.abs(R[0]-1)+Math.abs(R[1]-2))<(Math.abs(L[0]-1)+Math.abs(L[1]-2))){
answer+='R';
R=[1,2];
}else if((Math.abs(R[0]-1)+Math.abs(R[1]-2))>(Math.abs(L[0]-1)+Math.abs(L[1]-2))){
answer+='L';
L=[1,2];
}else{
if(hand=='left'){
answer+='L';
L=[1,2];
}else{
answer+='R';
R=[1,2];
}
}
}else if(numbers[i]==5){
if((Math.abs(R[0]-2)+Math.abs(R[1]-2))<(Math.abs(L[0]-2)+Math.abs(L[1]-2))){
answer+='R';
R=[2,2];
}else if((Math.abs(R[0]-2)+Math.abs(R[1]-2))>(Math.abs(L[0]-2)+Math.abs(L[1]-2))){
answer+='L';
L=[2,2];
}else{
if(hand=='left'){
answer+='L';
L=[2,2];
}else{
answer+='R';
R=[2,2];
}
}
}else if(numbers[i]==8){
if((Math.abs(R[0]-3)+Math.abs(R[1]-2))<(Math.abs(L[0]-3)+Math.abs(L[1]-2))){
answer+='R';
R=[3,2];
}else if((Math.abs(R[0]-3)+Math.abs(R[1]-2))>(Math.abs(L[0]-3)+Math.abs(L[1]-2))){
answer+='L';
L=[3,2];
}else{
if(hand=='left'){
answer+='L';
L=[3,2];
}else{
answer+='R';
R=[3,2];
}
}
}else {
if((Math.abs(R[0]-4)+Math.abs(R[1]-2))<(Math.abs(L[0]-4)+Math.abs(L[1]-2))){
answer+='R';
R=[4,2];
}else if((Math.abs(R[0]-4)+Math.abs(R[1]-2))>(Math.abs(L[0]-4)+Math.abs(L[1]-2))){
answer+='L';
L=[4,2];
}else{
if(hand=='left'){
answer+='L';
L=[4,2];
}else{
answer+='R';
R=[4,2];
}
}
}
}
}
return answer;
}
회고🧐
음,,,, 뭔가 더 깔끔하게 할 수 있을것 같은데, 시간이 부족했음;;;
'코딩테스트' 카테고리의 다른 글
[1일1코👨🏻💻] Lv.1 실패율.js - 프로그래머스 (0) | 2020.11.06 |
---|---|
[1일1코👨🏻💻] Lv.1 예산.js - 프로그래머스 (0) | 2020.11.04 |
[1일 1코👨🏻💻] Lv.1 직사각형 별찍기.js - 프로그래머스 (0) | 2020.10.28 |
[1일1코👨🏻💻] Lv.1 x만큼 간격이 있는 n개의 숫자.js - 프로그래머스 (0) | 2020.10.28 |
[1일1코👨🏻💻] Lv.1 행렬의 덧셈.js - 프로그래머스 (0) | 2020.10.27 |
댓글