본문 바로가기

알고리즘 문제풀이/프로그래머스 Level 1

[2020 카카오 인턴십/Java] 키패드 누르기

# 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

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

programmers.co.kr

 

목차

 

나의 풀이 포인트
  1. 0~9까지의 키패드를 배열화. ex) 1은 (0,0), 2는 (0,1)

 

나의 문제풀이
class Solution {
    public String solution(int[] numbers, String hand) {
        StringBuilder answer = new StringBuilder();
        int[][] keypad = {{3,1}, {0,0}, {0,1}, {0,2}, {1,0}, {1,1}, {1,2}, {2,0}, {2,1}, {2,2}};
        int[] left = {3,0};
        int[] right = {3,2};
        boolean doLeft = true;
        
        for (int number : numbers) {
            switch (number) {
                case 1: case 4: case 7:
                    doLeft = true;
                    break;
                case 3: case 6: case 9:
                    doLeft = false;
                    break;
                case 2: case 5: case 8: case 0:
                    int leftDistance = Math.abs(keypad[number][0] - left[0]) + Math.abs(keypad[number][1] - left[1]);
                    int rightDistance = Math.abs(keypad[number][0] - right[0]) + Math.abs(keypad[number][1] - right[1]);
                    
                    if (leftDistance > rightDistance) {
                        doLeft = false;
                    } else if (leftDistance < rightDistance) {
                        doLeft = true;
                    } else {
                        doLeft = hand.equals("left");
                    }
                    break;
            }
            
            if (doLeft) {
                left = keypad[number];
                answer.append("L");
            } else {
                right = keypad[number];
                answer.append("R");
            }
        }
        
        return answer.toString();
    }
}