문제 요약
1
, 4
, 7
을 입력할 때는 왼손 엄지손가락을 사용합니다.3
, 6
, 9
를 입력할 때는 오른손 엄지손가락을 사용합니다.2
, 5
, 8
, 0
을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다. 입력할 숫자 hand answer
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL"
public class Keypad {
public static String solution(int[] numbers, String hand) {
String answer = "";
int left = 10; // = *
int right = 12; // = #
for(int i = 0; i < numbers.length; i++){
if(numbers[i]%3 == 1){
// 1, 4, 7 (3으로 나눠 나머지가 1인 숫자)라면 왼손으로 누른다
answer = answer + "L";
left = numbers[i];
}else if(numbers[i]%3 == 0){
// 3, 6, 9 : 오른손으로 누른다
answer = answer + "R";
right = numbers[i];
}else{
// 2, 5, 8, 0 : 거리를 계산한 후 가까운 손으로 누른다
// 왼손, 오른손과의 거리 구하기
if(Math.abs(numbers[i]-left) > Math.abs(numbers[i]-right)){
answer = answer + "R";
right = numbers[i];
}else if(Math.abs(numbers[i]-left) < Math.abs(numbers[i]-right)){
answer = answer + "L";
left = numbers[i];
}else{
if(hand.equals("Right")){
answer = answer + "R";
right = numbers[i];
}else{
answer = answer + "L";
left = numbers[i];
}
}
}
}
return answer;
}
}
위의 코드가 실패하는 이유
⇒ 만약 왼손 또는 오른손의 위치가 2, 5, 8 , 0중 하나에 위치할 경우 위의 작성한 거리 계산 결과에 따른 실행 결과가 다르게 된다. 예를 들어 왼손이 5에 있고 오른손이 9에 있고 8을 누르려고 한다고 생각해보자. 위의 코드대로면 왼손과의 거리는 3, 오른손과의 거리는 1이된다. 하지만 키패드 상에서 거리는 모두 1이므로 hand를 따라 누르게 된다. 이 경우를 생각해서 다시 코드를 짜야한다!!
public class Keypad {
public static String solution(int[] numbers, String hand) {
String answer = "";
int left = 10; // = *
int right = 12; // = #
for(int i = 0; i < numbers.length; i++){
if(numbers[i]==0){
// 거리 계산을 위해 0을 11로 치환
numbers[i] = 11;
}
if(numbers[i]%3 == 1){
// 1, 4, 7 (3으로 나눠 나머지가 1인 숫자)라면 왼손으로 누른다
answer = answer + "L";
left = numbers[i];
}else if(numbers[i]%3 == 0){
// 3, 6, 9 : 오른손으로 누른다
answer = answer + "R";
right = numbers[i];
}else{
// 2, 5, 8, 0 : 거리를 계산한 후 가까운 손으로 누른다
// 왼손, 오른손과의 거리 구하기
int left_dis = Math.abs((left-numbers[i]))/3 + Math.abs((left-numbers[i]))%3;
int right_dis = Math.abs((right-numbers[i]))/3 + Math.abs((right-numbers[i]))%3;
if(right_dis > left_dis){
answer = answer + "L";
left = numbers[i];
}else if(right_dis < left_dis){
answer = answer + "R";
right = numbers[i];
}else{
if(hand.equals("left")){
answer = answer + "L";
left = numbers[i];
}else{
answer = answer + "R";
right = numbers[i];
}
}
}
}
return answer;
}
}