본문 바로가기
코딩테스트/LV. 1

LV. 1 :: 키패드 누르기

by KUROMI98 2023. 2. 1.

https://school.programmers.co.kr/learn/courses/30/lessons/67256#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

자꾸 오류난 이유:

두 점 사이의 거리를 좌표값의 차이의 절댓값을 더해 구했어야 하는데,

내가 두 점 사이의 거리를 좌표값의 차이를 제곱해 더해줘버려서

function solution(numbers, hand) 
{
    var lorR = '';
    var lastL = 10;
    var lastR = 12;
    var distanceL = 0;
    var distanceR = 0;
        
    
    for (i=0; i<numbers.length; i++)
    {
        if ( (numbers[i]==1) || (numbers[i]==4) || (numbers[i]==7) )
        { 
            lorR += 'L';
            lastL=numbers[i];
        }
        // 2. lorR애 L 더하고 lastL값을 number[i] 로 바꿔준다
        
        else if ( (numbers[i]==3) || (numbers[i]==6) || (numbers[i]==9) )
        { 
            lorR += 'R';
            lastR=numbers[i];
        }
        // 3. lorR에 R 더하고 lastR값을 number[i] 로 바꿔준다
        
        
        else if ( (numbers[i]==2) || (numbers[i]==5) || (numbers[i]==8) )
        { 
            distanceL = Math.abs((Math.floor((lastL-1)/3)-Math.floor((numbers[i]-1)/3)))+Math.abs(((lastL-1)%3-(numbers[i]-1)%3));
            distanceR = Math.abs((Math.floor((lastR-1)/3)-Math.floor((numbers[i]-1)/3)))+Math.abs(((lastR-1)%3-(numbers[i]-1)%3));
            
            if ( distanceL < distanceR) 
            {
                lorR += 'L'; 
                lastL=numbers[i];
            }
            // 4. if (numbers[i]와 lastL값이 더 가깝다) {lorR += 'L'; lastL=numbers[i];}
            
            if ( distanceL > distanceR)
            {
                lorR += 'R'; 
                lastR = numbers[i];
            }
            // 4. if (numbers[i]와 lastR값이 더 가깝다) {lorR += 'R'; lastR=numbers[i];}
            
            if (distanceL == distanceR)
            {
                if (hand == 'right') 
                {
                    lorR += 'R'; 
                    lastR = numbers[i];
                }
                else 
                {
                    lorR += 'L'; 
                    lastL = numbers[i];
                }
            }
            //4-1 거리가 같다면
            
        }
        
        else if (numbers[i]==0)
        { 
            distanceL = Math.abs(Math.floor((lastL-1)/3)-3)+Math.abs((lastL-1)%3-1);
            distanceR = Math.abs(Math.floor((lastR-1)/3)-3)+Math.abs((lastR-1)%3-1);
            
            if ( distanceL < distanceR) 
            {
                lorR += 'L'; 
                lastL=11;
            }
            // 4. if (numbers[i]와 lastL값이 더 가깝다) {lorR += 'L'; lastL=numbers[i];}
            
            if ( distanceL > distanceR)
            {
                lorR += 'R'; 
                lastR = 11;
            }
            // 4. if (numbers[i]와 lastR값이 더 가깝다) {lorR += 'R'; lastR=numbers[i];}
            
            if (distanceL == distanceR)
            {
                if (hand == 'right') 
                {
                    lorR += 'R'; 
                    lastR = 11;
                }
                else if (hand == 'left') 
                {
                    lorR += 'L'; 
                    lastL = 11;
                }
            }
            //4-1 거리가 같다면
            
        }
        
    }
    return lorR;
    
}

 

'코딩테스트 > LV. 1' 카테고리의 다른 글

LV1 :: 크기가 작은 문자열  (0) 2023.10.08
LV. 1 :: [1차] 비밀지도  (0) 2023.02.01
LV. 1 :: 다트 게임  (1) 2023.02.01
LV. 1 :: 폰켓몬  (0) 2023.02.01
LV. 1 :: 예산  (0) 2023.01.31

댓글