본문 바로가기
코딩테스트/프로그래머스

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

by 의정부핵꿀밤 2022. 9. 18.
728x90

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

 

프로그래머스

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

programmers.co.kr


이 문제는 키패드 간 거리 계산만 잘 하면 쉽게 풀 수 있는 문제였다

(난 생각 못해서 찾아봄😅)

 

 

이렇게 되어 있으니까, *은 10, 0은 11, #은 12라고 생각한다

그리고 줄마다 숫자가 3씩 차이나고 왼쪽 오른쪽으로는 1씩 차이나니까

현재 위치에서 누를 위치까지의 거리를 3으로 나눈 몫과 3으로 나눈 나머지를 더해주면 된다

예를 들어 현재 1번 위치에서 8번을 누른다면 8-3=5 니까 (5/3) + (5%3) = 1 + 2 = 3이므로 거리는 3이 된다

 

 

그리고 1,4,7이면 왼손, 3,6,9면 오른손 쓰고

위 방법으로 거리계산해서 가까운 손으로 하되 거리가 같은 경우에는 오른손잡이는 오른손, 왼손잡이는 왼손으로 누르면 된다!

 

 

 

자바 코드)

import java.util.*;

class Solution {
    public String solution(int[] numbers, String hand) {
        //1, 4, 7 - L
        // 3, 6, 9 - R
        String answer = "";
        int left = 10; //*
        int right = 12; //#
        
        for(int num : numbers) {
            if(num==1 || num==4 || num==7) {
                left = num;
                answer += "L";
            } else if(num==3 || num==6 || num==9) {
                right = num;
                answer += "R";
            } else {
                if(num == 0) {
                    num = 11;
                }
                
                int leftDist = Math.abs(num-left)/3 + Math.abs(num-left)%3;
                int rightDist = Math.abs(num-right)/3 + Math.abs(num-right)%3;
                
                if(leftDist<rightDist) {
                    answer += "L";
                    left = num;
                } else if(leftDist>rightDist) {
                    answer +="R";
                    right = num;
                } else {
                    if(hand.equals("left")) {
                        answer += "L";
                        left = num;
                    } else {
                        answer +="R";
                        right = num;
                    }
                }
            }
        }
        return answer;
    }
}

 


참고)

https://shrimp-burger.tistory.com/185

 

[JAVA] 프로그래머스 Lv.1 : 키패드 누르기

🔥 2020 카카오 인턴십 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨

shrimp-burger.tistory.com

 

728x90

댓글