[카카오 인턴] 키패드 누르기

문제


문제 풀이

해당 문제에서 가장 고민해야 하는 부분은 2, 5, 8, 0 을 입력할 때 어떻게 그 값과 가까운 위치의 손을 불러오는가 이다. 

 

가운데 값보다 작은 값에 손이 있으면 나누기를 통해 위치를 추적하고, 가운데 값보다 높은 값에 손이 있으면 나머지 값을 통해 계산이 가능하다.

 

int leftHand = Math.abs(i - left) / 3 + Math.abs(i - left) % 3;
int rightHand = Math.abs(i - right) / 3 + Math.abs(i - right) % 3;

나의 풀이

public static String solution(int[] numbers, String hand) {
    StringBuilder sb = new StringBuilder();
    int left = 10;
    int right = 12;

    for (int i : numbers) {
        if (i == 1 || i == 4 || i == 7) {
            sb.append("L");
            left = i;
        } else if (i == 3 || i == 6 || i == 9) {
            sb.append("R");
            right = i;
        } else {
            if (i == 0) i = 11;

            int leftHand = Math.abs(i - left) / 3 + Math.abs(i - left) % 3;
            int rightHand = Math.abs(i - right) / 3 + Math.abs(i - right) % 3;

            if (leftHand < rightHand) {
                sb.append("L");
                left = i;
            } else if (rightHand < leftHand) {
                sb.append("R");
                right = i;
            } else {
                if ("left".equals(hand)){
                    sb.append("L");
                    left = i;
                } else {
                    sb.append("R");
                    right = i;
                }
            }
        }
    }

    return sb.toString();
}

'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글

문자열 나누기  (0) 2023.03.24
크레인 인형뽑기 게임  (0) 2023.03.24
옹알이 (2)  (0) 2023.03.23
카드 뭉치  (0) 2023.03.23
완주하지 못한 선수  (0) 2023.03.23