
문제

접근 방식
- 키패드의 *, 0, #을 각각 10, 11, 12로 취급한다.
- 누를 손을 판단해야 하는 경우([2, 5, 8, 0]을 누르는 경우)에 거리를 계산하여 판단
- 거리 계산식 => ( (누를 번호 - 왼손의 위치) / 3 + (누를 번호 - 오른손의 위치) % 3 ) 의 절댓값
- 거리가 같을 때에는 왼손잡이, 오른손잡이 확인하여 판단
코드
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int lh = 10, rh = 12;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < numbers.length; i++){
switch (numbers[i]){
case 1: case 4: case 7:
sb.append("L");
lh = numbers[i];
break;
case 3: case 6: case 9:
sb.append("R");
rh = numbers[i];
break;
default:
int number = numbers[i] == 0 ? 11 : numbers[i];
String use = getHand(number, lh, rh, hand);
if(use.equals("L")){
lh = number;
} else if (use.equals("R")) {
rh = number;
}
sb.append(use);
break;
}
}
answer = sb.toString();
return answer;
}
private String getHand(int number, int lh, int rh, String hand) {
int left = Math.abs((number - lh) / 3 + (number - lh) % 3);
int right = Math.abs((number - rh) / 3 + (number - rh) % 3);
String use = "";
if(left == right){
use = hand.equals("left") ? "L" : "R";
} else if (left > right) {
use = "R";
} else if (left < right){
use = "L";
}
return use;
}
}