스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.
이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.
[제한사항]
입출력 예
numbers | hand | result |
---|---|---|
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] | "right" | "LRLLLRLLRRL" |
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] | "left" | "LRLLRRLLLRR" |
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0] | "right" | "LLRLLRLLRL" |
https://school.programmers.co.kr/learn/courses/30/lessons/67256
getNumberPosition()
)class Solution {
public String solution(int[] numbers, String hand) {
StringBuilder answer = new StringBuilder();
int[] leftHand = {3, 0};
int[] rightHand = {3, 2};
for (int num : numbers) {
int[] position = getNumberPosition(num);
if (num == 1 || num == 4 || num == 7) {
answer.append("L");
leftHand = position;
} else if (num == 3 || num == 6 || num == 9) {
answer.append("R");
rightHand = position;
} else {
int leftDistance = getDistance(leftHand, position);
int rightDistance = getDistance(rightHand, position);
if (leftDistance < rightDistance || (leftDistance == rightDistance && hand.equals("left"))) {
answer.append("L");
leftHand = position;
} else {
answer.append("R");
rightHand = position;
}
}
}
return answer.toString();
}
private int[] getNumberPosition(int num) {
int[] position = new int[2];
position[0] = (num - 1) / 3;
position[1] = (num - 1) % 3;
if (num == 0) {
position[0] = 3;
position[1] = 1;
}
return position;
}
private int getDistance(int[] handPosition, int[] numberPosition) {
return Math.abs(handPosition[0] - numberPosition[0]) + Math.abs(handPosition[1] - numberPosition[1]);
}
}
class Solution {
int tempL = 10;
int tempR = 12;
String myhand;
public String solution(int[] numbers, String hand) {
myhand = ((hand.equals("right"))? "R": "L");
String answer = "";
for(int i=0 ; i< numbers.length ; i++) {
switch(numbers[i]) {
case 1: case 4: case 7:
answer += "L";
tempL = numbers[i];
break;
case 3: case 6: case 9:
answer += "R";
tempR = numbers[i];
break;
default:
String tempHand = checkHand(numbers[i]);
if(tempHand.equals("R"))
tempR = numbers[i] + ((numbers[i] == 0)? 11:0);
else tempL = numbers[i] + ((numbers[i] == 0)? 11:0);
answer += tempHand;
break;
}
}
return answer;
}
private String checkHand(int tempNum) {
int leftDistance = 0;
int rightDistance = 0;
if(tempNum == 0) tempNum = 11;
leftDistance = Math.abs((tempNum-1)/3 - (tempL-1)/3) + Math.abs((tempNum-1)%3 - (tempL-1)%3);
rightDistance = Math.abs((tempNum-1)/3 - (tempR-1)/3) + Math.abs((tempNum-1)%3 - (tempR-1)%3);
System.out.println(tempNum + ": " + leftDistance + ", " + rightDistance);
return ((leftDistance == rightDistance)? myhand: (leftDistance > rightDistance)? "R": "L");
}
}
case 1: case 4: case 7:
처음 알았다 알아둬야겠다!