[프로그래머스] 키패드 누르기 - 2020 카카오 인턴쉽, 자바

문제링크 🚩

https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📕 문제 접근 📕

 

현재 왼손과 오른손의 위치를 키패드를 누를 때 마다 기억하고 해야한다.

키패드의 위아래로 3차이, 양옆으로 1차이인 것을 이용해서 거리를 구하는 공식을 활용하였다.

 

 

💻 Code 💻

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 { // 2 5 8 0 일 때 
                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;
    }
}