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

2020. 7. 2. 19:29프로그래머스/카카오

import java.util.*;

class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";
        
        String left = "*";
        String right = "#";
        
        String[][] phone = {{"1","2","3"},{"4","5","6"},{"7","8","9"},{"*","0","#"}};
        
        for (int i=0; i<numbers.length; i++){
            if(numbers[i]==1 || numbers[i]==4 || numbers[i] ==7){
               answer+="L";
               left = Integer.toString(numbers[i]);
            }else if(numbers[i] == 3 || numbers[i]==6 ||numbers[i]==9){
               answer+="R";
               right = Integer.toString(numbers[i]);
            }else{
               int leftDistance = calculateDistance(left,numbers[i],phone);
               int rightDistance = calculateDistance(right,numbers[i],phone);
               
                if(leftDistance<rightDistance){
                    answer +="L";
                    left = Integer.toString(numbers[i]);
                }else if (rightDistance<leftDistance){
                    answer += "R";
                    right = Integer.toString(numbers[i]);
                }else{
                    if(hand.equals("right")){
                        answer+="R";
                        right = Integer.toString(numbers[i]);
                    }else{
                        answer+="L";
                        left = Integer.toString(numbers[i]);
                    }
                }
                
            }
        }        
        
        return answer;
    }
    
    private int calculateDistance(String target, int number, String[][] phone){
        int targetX=0;
        int targetY=0;
        int numberX=0;
        int numberY=0;
        
        for(int i=0; i<phone.length; i++){
            for(int j=0; j<phone[0].length; j++){
                if(phone[i][j].equals(target)){
                    targetX = i;
                    targetY = j;
                }
                if(phone[i][j].equals(Integer.toString(number))){
                    numberX = i;
                    numberY = j;
                }
            }
        }
        
        return Math.abs(targetX-numberX) + Math.abs(targetY-numberY);
    }
}

1. 폰을 만들고 왼손 오른손위치 초기화.

2. numbers돌면서 1,4,7이면 왼손으로 3,6,9면 오른손으로 누르고 위치변경

3. 2,5,8,0이면 거리를 계산하여 더 짧은 손으로 누르고 위치변경. 이때 같으면 hand에따라 누르고 위치변경