ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] (카카오 인턴) 키패드 누르기
    카테고리 없음 2022. 1. 4. 13:35

    문제 설명과 제한사항

     

     

    풀이

     

    class Solution {
        public String solution(int[] numbers, String hand) {
            String answer = "";
            int lh = 10;
            int rh = 12;
            for(int num : numbers){
                if(num == 1||num == 4||num == 7){
                    answer += "L";
                    lh = num;
                }
                else if (num == 3||num == 6||num == 9){
                    answer += "R";
                    rh = num;
                }
                else {
                    if(dis(num,lh)>dis(num,rh)){
                        answer += "R";
                        rh = num;
                    }
                    else if(dis(num,lh)<dis(num,rh)){
                        answer += "L";
                        lh = num;    
                    }
                    else {
                        if(hand.equals("right")){
                            answer += "R";
                            rh = num;
                        }
                        else if(hand.equals("left")){
                            answer += "L";
                            lh = num;
                        }
                    }
                }
            }
            return answer;
        }
        
        public int dis(int pushnum, int handnum){
            int distance;
            int tmp;
            if(pushnum == 0) pushnum = 11;
            if(handnum == 0) handnum = 11;
            int pushtmp = pushnum-1;
            int handtmp = handnum -1;
            
            if(pushnum > handnum){
                tmp = pushtmp/3 - handtmp/3;
                tmp = tmp + Math.abs(pushtmp%3 - handtmp%3);
            }
            else if(pushnum < handnum){
                tmp = handtmp/3 - pushtmp/3;
                tmp = tmp + Math.abs(pushtmp%3 - handtmp%3);
            }
            else tmp = 0;
            distance = tmp;
            return distance;
        }
    }

     

    ++

     거리를 계산하는 dis 함수를 먼저 짰다.

    이 후 본문

    본문 1. for each 사용 

           2. || 사용 : 멍청하게 num ==1 || 4 || 7 이렇게 쓰고 있었다.

           3. lh, rh (현재의 손 위치) 시작이 *, # 이기 때문에 시작점을 임의로 10, 12로 잡았다.

           4. 조금 더 간결하고 보기 쉽게 짜고 싶었다. 

     

    dis 함수 1. 0에 손 위치를 생각해서 11로 바꾸는 걸 생각 못했다.

                2. 거리를 계산 할때 3으로 나눠 몫과 나머지의 차이로 계산 했다. 

                   하지만 3을 나누면 0이 되어 거리 계산에 착오가 생기는 것을 생각 하지 못했다. 

                   그래서 tmp를 만들어 1을 뺀 값으로 계산 했다.

                3. Math.abs(int a) : 정수 a (실수도 가능한듯)를 절대값으로 치환해서 반환한다.

     

    생각 하지 못한 부분이 많아 굉장히 오래 걸렸다..

      

Designed by Tistory.