class Solution {
private static final int[][] keypad = {{1, 3}, {0, 0}, {1, 0}, {2, 0}, {0, 1}, {1, 1}, {2, 1}, {0, 2}, {1, 2}, {2, 2}};
private static int[] left = {0, 3};
private static int[] right = {2, 3};
public static String solution(int[] numbers, String hand) {
StringBuilder answer = new StringBuilder();
for (int i : numbers) {
String usedHand = getHand(i, hand);
answer.append(usedHand);
if (usedHand.equals("L")) {
left = keypad[i];
} else {
right = keypad[i];
}
}
return answer.toString();
}
private static String getHand(int number, String hand) {
if (number == 1 || number == 4 || number == 7) {
return "L";
}
if (number == 3 || number == 6 || number == 9) {
return "R";
}
if (getDistance(left, number) < getDistance(right, number)) {
return "L";
}
if (getDistance(left, number) > getDistance(right, number)) {
return "R";
}
return hand.equals("right") ? "R" : "L";
}
private static int getDistance(int[] pos, int number) {
return Math.abs(pos[0] - keypad[number][0]) + Math.abs(pos[1] - keypad[number][1]);
}
}
키패드 모양을 2차원 좌표로 표현하여 2차원배열로 만들고, 오른손 왼손의 위치도 좌표로 표현하여 배열로 나타냄
getHand 에서 눌러야 하는 번호를 어느손이 누를지 선택함
양손 모두 누를 수 있는 번호에 대해 현재 손으로부터 눌러야하는 번호까지의 거리를 getDistance 를 통해 구함