본문 바로가기
알고리즘

[2020 카카오 인턴십] 키패드 누르기- java

by 육빔 2024. 7. 24.
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

 

왼손, 오른손 기준으로 키패드에 어떤 손이 더 가까운지 찾아서 return해주는 문제

조건은 왼손, 오른손을 따지고 움직인 현재 손의 위치를 저장하여 가까운 거리를 반환

 

풀이

 

left, right 배열에 각각 있으면 무조건 left, right 반환 후 result에 더해주고 만약 그 사이라면 거리를 계산 후 값을 result에 더해준다.

 

코드

class Solution {
    public String solution(int[] numbers, String hand) {
        int[] left = {1, 4, 7};
        int[] right = {3, 6, 9};
        int[] mid = {2, 5, 8, 0};
        
        int hand_left = 10;  // '*' 키패드 위치 (10으로 간주)
        int hand_right = 12; // '#' 키패드 위치 (12으로 간주)
        
        String result = "";
        for(int cur : numbers){
            int flag = 0;
            for(int i = 0; i < left.length; i++){
                if(cur == left[i]){
                    result += "L";
                    hand_left = cur;
                    flag = 1;
                    break;
                }
            }
            
            for(int i = 0; i < right.length; i++){
                if(cur == right[i]){
                    result += "R";
                    hand_right = cur;
                    flag = 1;
                    break;
                }
            }
            
            if(flag == 1) continue;
            
            if (cur == 0) cur = 11; // 0을 11로 간주하여 위치 조정

            // 왼손과의 거리와 오른손과의 거리를 계산
            int leftDistance = Math.abs(cur - hand_left) / 3 + Math.abs(cur - hand_left) % 3;
            int rightDistance = Math.abs(cur - hand_right) / 3 + Math.abs(cur - hand_right) % 3;

            // 왼손이 가까운 경우
            if (leftDistance < rightDistance) {
                result += "L";
                hand_left = cur;
            // 오른손이 가까운 경우
            } else if (leftDistance > rightDistance) {
                result += "R";
                hand_right = cur;
            // 거리가 같은 경우
            } else {
                // 왼손잡이인 경우
                if (hand.equals("left")) {
                    result += "L";
                    hand_left = cur;
                // 오른손잡이인 경우
                } else {
                    result += "R";
                    hand_right = cur;
                }
            }
        }
        return result;
    }
}

 

완성

728x90
반응형