티스토리 뷰

728x90

 

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

 

프로그래머스

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

programmers.co.kr

 

 

2020 카카오 인턴십 Level 1 문제다.

 

 

 

키패드가 다음과 같이 존재한다.

1 2 3

4 5 6

7 8 9

* 0 #

 

번호 순서대로 다음과 같은 거리를 부여하고,

각 손가락이 어떤 점수의 키패드에 위치하는지 left변수와 right변수에 저장한다.

1 1 1

2 2 2

3 3 3

4 4 4

 

 

왼쪽 키패드는 왼쪽 손가락, 오른쪽 키패드는 오른쪽 손가락을 이용했고

가운데 키패드는 거리 값을 각각 계산하여 어떤 손가락이 더 거리가 가까운지 비교했다.

 

만약 왼쪽 손가락이 가운데 키패드의 거리 1에, 오른쪽 손가락이 오른쪽 키패드의 거리 1에 있고

가운데 키패드의 거리 3에 가려면,

거리 차이는 똑같이 2일 것이다.

하지만 왼쪽 손가락은 이미 가운데 키패드에 있지만 

오른쪽 손가락은 오른쪽 키패드에 있기 때문에 1만큼의 거리가 더 필요하다.

 

즉 왼쪽과 오른쪽 손가락이 거리와 별도로 가운데 키패드에 위치하는지 구분하는 것이 필요하다.

이를 구분하기 위해 손가락이 가운데 키패드에 위치한다면 거리의 마이너스 값으로 저장했다.

 

 만약 가운데 키패드에 위치하는 것이 아니고(변수 값이 양수) 가운데 키패드에 가야 한다면 거리1을 더 더해줘야 한다.

 

 

class Solution {
    public String solution(int[] numbers, String hand) {
        int arr[] = {4, 1, 1, 1, 2, 2, 2, 3, 3, 3};
        
        int left = 4, right = 4;
        StringBuilder sb = new StringBuilder();
        
        for(int i=0;i<numbers.length;i++) {
            int n = numbers[i];
            
            if(n == 1 || n == 4 || n == 7) {
                left = arr[n];
                sb.append("L");
            }
            else if(n == 2 || n == 5 || n == 8 || n == 0) {
                int tmpL = left < 0 ? Math.abs(-left - arr[n]) : Math.abs(left - arr[n]) + 1;
                int tmpR = right < 0 ? Math.abs(-right - arr[n]) : Math.abs(right - arr[n]) + 1;
                
                if(tmpL < tmpR || (tmpL == tmpR && hand.equals("left"))) {
                    left = -arr[n];
                    sb.append("L");
                }
                else if(tmpL > tmpR || (tmpL == tmpR && hand.equals("right"))) {
                    right = -arr[n];
                    sb.append("R");
                }
            }
            else {
                right = arr[n];
                sb.append("R");
            }
        }
        
        return sb.toString();
    }
}
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함