[Programmers][Java]キーボードを押す


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つのテストケースだけが失敗しました。