[Programmers][Java] 키패드 누르기

HyeBin, Park·2021년 5월 1일
0

Programmers

목록 보기
6/26
post-thumbnail

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

📒 문제



📒 제한사항


🌻 코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    public String solution(int[] numbers, String hand) {
     	    String answer = "";
            //좌표로 거리를 구할거라서 키패드 번호[index] = 좌표 설정
            // 배열의 마지막 두 값은 초기값 *와 #의 좌표 
            int a[][]={{0,1},{3,0},{3,1},{3,2},{2,0},{2,1},{2,2},{1,0},{1,1},{1,2},{0,0},{0,2}};
            // 손의 위치를 리스트에 담아줌
            List<Character> list = new ArrayList<>();
            // 왼손과 오른손의 위치 초기화
            // 왼손에서의 거리, 오른손에서의 거리 초기화
            int Left =10, Right=11, leftmove =0 , rightmove =0;
            for(int i=0;i<numbers.length;i++){
                //1,4,7은 왼손으로만 가능
                if(numbers[i]==1||numbers[i]==4||numbers[i]==7) list.add('L');
                //3,6,9는 오른손으로만 가능
                else if(numbers[i]==3||numbers[i]==6||numbers[i]==9) list.add('R');
                // 제외한 모든 경우의 수 
                else{
		    //왼손의 이동경로
                    leftmove = Math.abs(a[Left][0]-a[numbers[i]][0])+Math.abs(a[Left][1]-a[numbers[i]][1]);
                    //오른손의 이동경로
                    rightmove = Math.abs(a[Right][0]-a[numbers[i]][0])+Math.abs(a[Right][1]-a[numbers[i]][1]);
                    
                    if(i==0) {
                        list.add(Character.toUpperCase(hand.charAt(0)));
                    }
                    else {
                        // 거리 비교
                        if (leftmove > rightmove) list.add('R');
                        else if (leftmove < rightmove) list.add('L');
                        else list.add(Character.toUpperCase(hand.charAt(0)));
                    }
                }
		 //왼손과 오른손의 위치 저장
                if(list.get(i)=='L') Left=numbers[i];
                else Right=numbers[i];
               
            }
            
            for(int i=0;i<list.size();i++){
                answer+=list.get(i);
            }
            return answer;
    }
}

💡 정리하기

👉 좌표를 통해서 접근을 하니까 수월했다. 하지만 테스트케이스 2개만 실패해서 헤맸는데, 손위치의 초기값 설정을 해주지 않아서였다.

0개의 댓글