본문 바로가기

알고리즘 테스트 공부

[카카오 인턴] 키패드 누르기

풀이

현재 왼손과 오른손의 위치를 키패드를 누를 때 마다 기억하고 있어야하는 부분을 구현하기 까다로운 문제였다. 

키패드 위아래로 3차이, 양옆으로 1차이인 것을 이용해서 아래와 같이 거리를 구하는 식을 이용해서 풀었다. 

int leftdist = Math.abs(tmp - left) / 3 + Math.abs(tmp - left) % 3;
int rightdist = Math.abs(tmp - right) / 3 + Math.abs(tmp - right) % 3;

tmp = 입력받은 값
left, right = 직전에 왼손과 오른손의 위치
leftdist, rightdist = 왼손과 입력받은 값의 거리, 오른손과 입력받은 값의 거리 

*,0,#은 10,11,12로 정해두고 문제를 풀었다.

코드

import java.util.*;
class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";
        int left =10;
        int right =12;
        
        for(int tmp: numbers){
            if(tmp==1||tmp==4||tmp==7){
                answer+="L";
                left = tmp;
            }else if(tmp==3||tmp==6||tmp==9){
                answer+="R";
                right = tmp;
            }else {
                if(tmp==0) tmp=11;
                int leftdist = Math.abs(tmp-left)/3+Math.abs(tmp-left)%3;
                int rightdist = Math.abs(tmp-right)/3+Math.abs(tmp-right)%3;
                
                if(leftdist<rightdist){
                    answer+="L";
                    left = tmp;
                }else if(leftdist>rightdist){
                    answer+="R";
                    right = tmp;
                }else{
                    if(hand.equals("left")){
                        answer+="L";
                        left = tmp;
                    }else{
                        answer+="R";
                        right = tmp;
                    }
                }
            }
        }
        return answer;
    }
}

 

'알고리즘 테스트 공부' 카테고리의 다른 글

실패율  (0) 2023.10.06
크레인 인형뽑기 게임  (0) 2023.10.05
두 개 뽑아서 더하기  (0) 2023.10.03
3진법 뒤집기  (0) 2023.10.01
내적  (0) 2023.09.30