
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
// 초기 손의 위치
int leftX = 0, leftY = 3;
int rightX = 2, rightY = 3;
for (int i = 0; i < numbers.length; i++) {
int number = numbers[i];
int targetX, targetY;
// 각 번호의 위치 파악
if (number == 0) {
targetX = 1;
targetY = 3;
} else {
targetX = (number - 1) % 3;
targetY = (number - 1) / 3;
}
// 두 손의 현재 위치에서의 거리 계산
//Math.abs 절댓값을 계산하는 메서드
int leftDistance = Math.abs(leftY - targetY) + Math.abs(leftX - targetX);
int rightDistance = Math.abs(rightY - targetY) + Math.abs(rightX - targetX);
// 거리에 따라 손 결정
if (number == 1 || number == 4 || number == 7) {
// 숫자가 1, 4, 7인 경우 무조건 왼손 사용
answer += "L";
leftX = targetX;
leftY = targetY;
} else if (number == 3 || number == 6 || number == 9) {
// 숫자가 3, 6, 9인 경우 무조건 오른손 사용
answer += "R";
rightX = targetX;
rightY = targetY;
} else {
// 숫자가 2, 5, 8, 0인 경우 두 손 사이의 거리에 따라 결정
if (leftDistance < rightDistance || (leftDistance == rightDistance && hand.equals("left"))) {
// 왼손이 더 가까우거나, 거리가 같지만 왼손잡이인 경우
answer += "L";
leftX = targetX;
leftY = targetY;
} else {
// 오른손이 더 가까우거나, 거리가 같지만 오른손잡이인 경우
answer += "R";
rightX = targetX;
rightY = targetY;
}
}
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/67256