프로그래머스 lv1 키패드 누르기

namkun·2022년 6월 29일
0

코딩테스트

목록 보기
3/79
class Solution {
 public String solution(int[] numbers, String hand) {
        StringBuilder answer = new StringBuilder();

		// init (*, #)
        int left = 10;
        int right = 12;

        for (int number : numbers) {
            if (number == 1 || number == 4 || number == 7) {
                answer.append("L");
                left = number;
            } else if (number == 3 || number == 6 || number == 9) {
                answer.append("R");
                right = number;
            } else {
                if(number == 0) number = 11;     
                
                int leftInstance = getInstance(number, left);
                int rightInstance = getInstance(number, right);

                if (leftInstance < rightInstance) {
                    answer.append("L");
                    left = number;
                } else if (leftInstance == rightInstance) {
                    if(hand.equals("left")){
                        answer.append("L");
                        left = number;
                    } else {
                        answer.append("R");
                        right = number;
                    }
                } else {
                    answer.append("R");
                    right = number;
                }
            }
        }

        return answer.toString();
    }

    public int getInstance(int number, int lastNum) {
        int x = Math.abs(((lastNum - 1) / 3) - ((number - 1) / 3));
        int y = Math.abs(((lastNum - 1) % 3) - ((number - 1) % 3));
        return x + y;
    }
}

소감

  • 문제를 풀어나가는 방법을 잡는데 어려움을 겪는다.
  • 좌표를 사용해서 해당 거리를 구할 수 있는 것 까지는 확인하였으나, 좌표값을 통해서 어떻게 해야할지를 꽤 오랫동안 고민했다.
  • 거리를 계산할때, 절대값을 사용해야하는 것을 알았으나, Math.abs() 함수를 '아 그거 뭐였지..' 하다가 한참 헤맸다.
profile
개발하는 중국학과 사람

0개의 댓글