해당 숫자를 인덱스로 갖는 좌표로 2차원 배열을 구성하였다.
그리고 numbers 배열에서 (x,y) 형식을 갖춘 원소를 하나씩 꺼내면서 x가 0이면 1,4,7 일 것이고 x가 2이면 3,6,9 이며, x가 1이면 2,5,8,0 중의 하나가 될 것이라 생각했다.
특히, x가 1 일때의 거리는 유클리드 거리가 아닌 맨해튼 거리를 구하여서 비교하였다.
나는 if문의 분절을 number에 해당하는 좌표의 x값을 기준으로 삼았는데, 다른 사람들의 풀이를 보니 number 자체 값으로 switch case를 통해 나누기도 한 듯하다.
다만 내 생각에는 내 방식이 좀 더 낫다고 생각한다. 어차피 number들을 좌표로 바꿔야한다면 굳이 따로 생각해서 코드 길이가 늘어나게 되지 않을까.
answer += "R"; answer += "L";
right = point; left = point;
class Solution {
public String solution(int[] numbers, String hand) {
int[][] phone = {{1,3},{0,0},{1,0},{2,0},{0,1},{1,1},{2,1},{0,2},{1,2},{2,2}};
int[] left = {0, 3};
int[] right = {2, 3};
String answer = "";
for (int number : numbers) {
int[] point = phone[number];
if (point[0] == 0) {
answer += "L";
left = point;
} else if (point[0] == 2) {
answer += "R";
right = point;
} else {
int leftDist = Math.abs(left[0] - point[0]) + Math.abs(left[1] - point[1]);
int rightDist = Math.abs(right[0] - point[0]) + Math.abs(right[1] - point[1]);
if (leftDist < rightDist) {
answer += "L";
left = point;
} else if (leftDist > rightDist || hand.equals("right")) {
answer += "R";
right = point;
} else {
answer += "L";
left = point;
}
}
}
return answer;
}
}