[프로그래머스] 키패드 누르기 java

Elmo·2022년 8월 21일
0
post-custom-banner

🔔 키패드 누르기

http://school.programmers.co.kr/learn/courses/30/lessons/67256/solution_groups?language=java

HashMap(key , value)에서 valueint[] 배열 사용가능

  • map.put(key, {1,2})와 같이 배열을 괄호를 사용해서 넣는 것은 불가
  • int value[][] = {{1,2},{3,4}};
    map.put(key,value[0]); map.put(key,value[1]);
    이와같이 사용

map 사용대신 키패드값을 배열에 넣고 switch문 사용하는 것이 더 간단하고 빠르며 직관적일 것이다.

🔑 java 풀이

import java.util.*;
class Solution {
    int distance(int handPosition,int num){
        HashMap<Integer,int[]> keypad= new HashMap<>();
        int i=0,j=0;
        //keypad 번호의 위치 순서대로 넣기 예) 4번 -> {2,1}
        for(int n=1; n<=9; n++){
            if(n%3==1){
                j=1;
                i++;
            }  
            int[] value = {i,j};
            keypad.put(n,value);
            j++;
        }
        int value[][] = {{4,1},{4,2},{4,3}};//* 0 # 위치 넣기
        keypad.put(-1,value[0]);//*
        keypad.put(0,value[1]);//0
        keypad.put(-2,value[2]);//#
        /*
        누르는 번호와 현재 손가락의 거리 =
        세로 index 차이 + 가로 index 차이
        */
        int column=Math.abs(keypad.get(handPosition)[0]-keypad.get(num)[0]);
        int row = Math.abs(keypad.get(handPosition)[1]-keypad.get(num)[1]);
        
        return row+column;
    }
    
    public String solution(int[] numbers, String hand) {
        int L=-1, R=-2;//시작위치 * #
        String answer = "";
        Solution st = new Solution();
        
        for(int i=0; i<numbers.length; i++){
            if(numbers[i]==1||numbers[i]==4||numbers[i]==7){ //1,4,7 왼손
                L=numbers[i];
                answer+="L";
            }
            else if(numbers[i]==3||numbers[i]==6||numbers[i]==9){//3,6,9 오른손
                R=numbers[i];
                answer+="R";
            }
            else{ //2, 5, 8, 0이면 왼손과 오른손의 거리 비교
                //왼손이 더 멀면
                if(st.distance(L,numbers[i])>st.distance(R,numbers[i]))  {
                    R=numbers[i];
                    answer+="R"; //오른손
                }
                else if(st.distance(L,numbers[i])<st.distance(R,numbers[i])){
                    //오른손이 더 멀면 왼손
                    L=numbers[i];
                    answer+="L";
                }
                else{//왼손과 오른손의 거리가 같으면 왼손잡이,오른손잡이인지 판단
                    if(hand.compareTo("right")==0){
                        R=numbers[i];
                        answer+="R";
                    }
                    else{
                        L=numbers[i];
                        answer+="L";
                    }
                }
                    
            }
        }
        return answer;
    }
}
profile
엘모는 즐거워
post-custom-banner

0개의 댓글