[프로그래머스][키패드 누르기]-Lv.1

호준·2022년 1월 4일
0

Algorithm

목록 보기
44/111
post-thumbnail

문제

키패드 누르기 <바로가기 링크>


코드

class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";
        int curLeft = 10; // * -> 10
        int curRight = 12; // # -> 12
        for(int num : numbers){
        	// 1,4,7 왼손
            // 3,6,9 오른손
            switch(num){
                case 1:
                    answer +="L";
                    curLeft = 1;
                    break;
                case 3:
                    answer +="R";
                    curRight = 3;
                    break;
                case 4:
                    answer +="L";
                    curLeft = 4;
                    break;
                case 6:
                    answer +="R";
                    curRight = 6;
                    break;
                case 7:
                    answer +="L";
                    curLeft = 7;
                    break;
                case 9:
                    answer +="R";
                    curRight = 9;
                    break;
                default:
                    int leftLen = getLength(curLeft,num);
                    int rightLen = getLength(curRight,num);
                    if(leftLen > rightLen){
                        answer += "R";
                        curRight=num;
                    }else if(leftLen < rightLen){
                        answer += "L";
                        curLeft = num;
                    }else{
                    	// 길이가 같으면 오른손 잡이면 오른손, 왼손잡이는 왼손
                        if(hand.equals("right")){
                            answer += "R";
                            curRight=num;
                        }else{
                            answer +="L";
                            curLeft=num;
                        }
                    }
                    break;
            }
        }     
        return answer;
    }
    // 손의 위치와 누르고자하는 번호의 길이 구하는 함수
    public static int getLength(int index, int num){
        if(index==0){ //  키패드 0이면 11숫자로 치환
            index=11;    
        }
        if(num==0){ // 키패드 0이면 11숫자로 치환
            num=11;
        }
        int indexX = (index-1)/3;
        int indexY = (index-1)%3;
        int numX = (num/3);
        int numY = 1;
        return Math.abs((indexX-numX)) + Math.abs((indexY-numY)); 
    }
}

코드 설명

키패드를 2차배열의 인덱스로 접근하였다.
1(0,0) 2(0,1) 3(0,2)
4(1,0) 5(1,1) 6(1,2)
7(2,0) 8(2,1) 9(2,2)
10(3,0) 11(3,1) 12(3,2)
이런식으로 인덱스로 접근한다(*은 10으로, 0은 11, #은 12)
1,4,7은 왼손으로 누르고, 3,6,9는 오른손으로 누른다.
고민해야하는 것은 2,5,8,0의 숫자들이다.
2,5,8,0을 눌러야 할 때 getLength() 함수를 통해 왼손과의 길이와 오른손과의 길이를 구해서 비교한다.

    public static int getLength(int index, int num){
        if(index==0){ //  키패드 0이면 11숫자로 치환
            index=11;    
        }
        if(num==0){ // 키패드 0이면 11숫자로 치환
            num=11;
        }
        int indexX = (index-1)/3;
        int indexY = (index-1)%3;
        int numX = (num/3);
        int numY = 1;
        return Math.abs((indexX-numX)) + Math.abs((indexY-numY)); 
    }
  • indexX : 왼손 또는 오른손의 X좌표
  • indexY : 왼손 도는 오른손의 Y좌표
  • numX : 누르고자하는 숫자의 X좌표
  • numY : 누르고자하는 숫자의 Y좌표
    return으로 x좌표끼리 차의 절댓값과 y좌표끼리 차의 절댓값을 더한것을 반환
profile
도전하자

0개의 댓글