https://programmers.co.kr/learn/courses/30/lessons/67256
- 키에 키패드를 설정해주고, 왼쪽 손가락 위치(LH)와 오른쪽 손가락 위치(RH) 처음 좌표를 표시할 배열을 선언해주고, 들어온 numbers의 값의 좌표를 표시할 배열(input) 배열을 선언해준다.
- for문을 돌려 numbers에 주어진 값이 key배열에 몇 행 몇 열에 있는지 담고, key[i][0]에 위치한다면 왼쪽 손가락 위치의 좌표를 해당 numbers의 인덱스로 바꿔주고 key[i][2]에 위치한다면 오른쪽 손가락 위치의 좌표를 해당 numbes의 인덱스로 바꿔주고 answer에 왼손(L)인지 오른손(R)인지 판별.
- key[i][1]에 있다면 가까이에 있는 손이 가야하는데, 거리를 잴 수 있도록 지금 손가락의 위치 좌표랑, 들어온 input값의 위치 좌표의 절댓값을 구해 가까운 거리의 손가락을 찾아 거리가 작은 값의 손을 answer에 추가하고 해당 손가락의 좌표를 input값으로 바꿔준다.
- 입력 받은 값에 대한 두 손가락의 거리가 같다면, 매개변수에 입력 받은 hand값에 따라 오른손잡이면 오른손을, 왼손잡이라면 왼손을 answer에 추가하여 해당 손의 위치 좌표를 바꿔준다.
- numbers를 다 돌고 answer의 값을 리턴.
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int key[][] = {{1, 2, 3},
{4, 5, 6,},
{7, 8, 9},
{42, 0 ,35}};
int LH[] = {3, 0};
int RH[] = {3, 2};
int input[] = new int[2];
for(int p=0; p<numbers.length; p++) {
for(int i=0; i<4; i++) {
for(int j=0; j<3; j++) {
if(key[i][j] == numbers[p]) {
input[0] = i;
input[1] = j;
if(j==0) {
LH[0] = i;
LH[1] = j;
answer += "L";
}
else if(j==2) {
RH[0] = i;
RH[1] = j;
answer += "R";
}
else if(j==1) {
int L = Math.abs((LH[0] - input[0])) + Math.abs((LH[1] - input[1]));
int R = Math.abs((RH[0] - input[0])) + Math.abs((RH[1] - input[1]));
if(L>R) {
answer += "R";
RH[0] = i;
RH[1] = j;
}
else if(L<R) {
answer += "L";
LH[0] = i;
LH[1] = j;
}
else if(L==R) {
answer += hand.toUpperCase().toCharArray()[0];
if(hand.toUpperCase().equals("RIGHT")) {
RH[0] = i;
RH[1] = j;
}
else if(hand.toUpperCase().equals("LEFT")) {
LH[0] = i;
LH[1] = j;
}
}
}
}
}
}
}
return answer;
}
}