반응형

이문제는 핸드폰의 키패드의 거리를 구하는게 관건이었던 문제였다.

x좌표와 y좌표가 있다고 생각하고,

각각의 x좌표와 y좌표를 구해야 했다.

 

x좌표의 경우는 1,2,3 = 0   // 4,5,6 = 1 // 7,8,9 = 2 가 나와야했다.

y좌표의 경우는 1,4,7 = 0 // 2,5,8 = 1 // 3,6,9 = 3 이 나와야했다.

 

 

잘 살펴보면

현재값에 -1을 하고 그 값에 나누기 3을 한 몫이 x좌표 나머지가 y좌표로 생각하고 두거리의 차이를 구할 수 있는것을 알 수 있다. 

 

좌표를 생각해내는 방법을 알아야 풀 수 있는 문제 같다............!

import java.util.*;

class Solution {
    int leftmin = 0;
    int rightmin = 0;
    
    public String solution(int[] numbers, String hand) {
        String answer = "";
        int leftnow = 10;
        int rightnow = 12;
        
        
        for(int i=0; i<numbers.length; i++){
            if(numbers[i] == 0 ){
                numbers[i] = 11;
            }
            
            if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7){
                answer += "L";
                leftnow = numbers[i]; 
            }else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9){
                answer += "R";
                rightnow = numbers[i];
            }else{
               //거리구하기
                guhaza(leftnow, rightnow, numbers[i]);
                if(leftmin < rightmin){
                    answer += "L";
                    leftnow = numbers[i];
                }else if(leftmin > rightmin){
                    answer += "R";
                    rightnow = numbers[i];
                }else{
                    if(hand.equals("right")){
                        answer += "R";
                        rightnow = numbers[i];
                    }else{
                        answer += "L";
                        leftnow = numbers[i];
                    }
                }
            }
        }
        return answer;
    }
    
    public void guhaza(int leftnow, int rightnow, int now){
        int x = (now-1) / 3;
        int y = (now-1) % 3;
    
        int lx = (leftnow-1) / 3;
        int ly = (leftnow-1) % 3;
        
        int rx = (rightnow-1) / 3;
        int ry = (rightnow-1) % 3;
        
        
        leftmin = Math.abs(x - lx) + Math.abs(y - ly) ;
        rightmin = Math.abs(x - rx) + Math.abs(y - ry);
        
        
    }
}
반응형

'알고리즘 > 알고리즘(java,프로그래머스1,2단계위주)' 카테고리의 다른 글

자릿수 더하기  (1) 2022.09.21
소수만들기  (0) 2021.09.19
숫자 문자열과 영단어  (0) 2021.09.17
오픈채팅방  (0) 2021.09.17
문자열 압축  (0) 2021.09.17

+ Recent posts