Algorithm & SQL/Programmers

[Programmers Lv.1 / Java] 키패드 누르기(2020 카카오 인턴십)

김룹 2024. 3. 25. 17:30

 

 

프로그래머스

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

programmers.co.kr

 

 

 

👇 내가 작성한 코드

import java.util.*;

class Solution {
    int[][] key = {
            {3, 1}, // 0
            {0, 0}, // 1
            {0, 1}, // 2
            {0, 2}, // 3
            {1, 0}, // 4
            {1, 1}, // 5
            {1, 2}, // 6
            {2, 0}, // 7
            {2, 1}, // 8
            {2, 2}, // 9
        };
        
    int[] leftLo = {3, 0}; // 현재 왼쪽 손가락의 위치
    int[] rightLo = {3, 2}; // 현재 오른쪽 손가락의 위치
    
    public String solution(int[] numbers, String hand) {
        StringBuilder answer = new StringBuilder();
        
        for(int n : numbers) {
            switch(n) {
                case 1: case 4: case 7:
                    answer.append("L"); // 왼손으로 누르기
                    leftLo = key[n]; // 왼쪽 손가락 위치 초기화
                    break;
                    
                case 3: case 6: case 9:
                    answer.append("R"); // 오른손으로 누르기
                    rightLo = key[n]; // 오른 손가락 위치 초기화
                    break;
                    
                default:
                    int leftDist = getDist(leftLo, key[n]); // 현재 왼손과 누를 숫자의 거리 구하기
                    int rightDist = getDist(rightLo, key[n]); // 상동
                    
                    if(leftDist < rightDist || (leftDist == rightDist && hand.equals("left"))) {
                        answer.append("L");
                        leftLo = key[n];
                    } else {
                        answer.append("R");
                        rightLo = key[n];
                    }
                    break;
            }
        }
        return answer.toString();
    }
    
    // 현재 위치와 누를 숫자의 거리 구하는 메소드
    public int getDist(int[] key1, int[] key2) {
        return Math.abs(key1[0] - key2[0]) + Math.abs(key1[1] - key2[1]);
    }
}

 

 

느낀 점 및 정리 ✍️

1. 재밌게 풀었따