[프로그래머스] 키패드 누르기 - Java, 자바

Kim Ji Eun·2022년 3월 24일
1

난이도

레벨 1

문제

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

풀이

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

키패드 위아래로 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;
    }
}
profile
Back-End Developer

0개의 댓글