

내가 작성한 코드
class Solution {
public String solution(int[] numbers, String hand) {
StringBuilder answer = new StringBuilder();
int left = 10; // 왼손 기본 위치 (* 키패드 위치)
int right = 12; // 오른손 기본 위치 (# 키패드 위치)
for (int i = 0; i < numbers.length; i++) {
int number = numbers[i];
// 0은 11로 처리 >> 키패드 위치 편의 상 변경
if (number == 0) {
number = 11;
}
// 1 4 7
if(number % 3 == 1) {
answer.append("L");
left = number; // 왼손 위치 업데이트
}
// 3 6 9
if (number % 3 == 0) {
answer.append("R");
right = number; // 오른손 위치 업데이트
}
// 2 5 8 0
if (number % 3 == 2) {
// 맨해튼 거리 공식 >> 격자(바둑판) 위에서 두 점 사이의 거리 구하는 공식 >> 행 차이 + 열 차이
int leftDistance = Math.abs(left - number) / 3 + Math.abs(left - number) % 3;
int rightDistance = Math.abs(right - number) / 3 + Math.abs(right - number) % 3;
if (leftDistance > rightDistance) {
answer.append("R");
right = number; // 오른손 위치 업데이트
}
if (leftDistance < rightDistance) {
answer.append("L");
left = number; // 왼손 위치 업데이트
}
if (leftDistance == rightDistance) {
if (hand.equals("right")) {
answer.append("R");
right = number; // 오른손 위치 업데이트
} else {
answer.append("L");
left = number; // 왼손 위치 업데이트
}
}
}
}
return answer.toString();
}
}
다른 사람의 코드
class Solution {
// 0부터 9까지 좌표 {y,x}
int[][] numpadPos = {
{ 3, 1 }, // 0
{ 0, 0 }, // 1
{ 0, 1 }, // 2
{ 0, 2 }, // 3
{ 1, 0 }, // 4
{ 1, 1 }, // 5
{ 1, 2 }, // 6
{ 2, 0 }, // 7
{ 2, 1 }, // 8
{ 2, 2 } // 9
};
// 초기 위치
int[] leftPos = { 3, 0 };
int[] rightPos = { 3, 2 };
String hand;
public String solution(int[] numbers, String hand) {
this.hand = (hand.equals("right")) ? "R" : "L"; // 손잡이 설정
String answer = "";
for (int num : numbers) {
String Umji = pushNumber(num);
answer += Umji;
if (Umji.equals("L")) {
leftPos = numpadPos[num];
continue;
}
if (Umji.equals("R")) {
rightPos = numpadPos[num];
continue;
}
}
return answer;
}
// num버튼을 누를 때 어디 손을 사용하는가
private String pushNumber(int num) {
if (num == 1 || num == 4 || num == 7)
return "L";
if (num == 3 || num == 6 || num == 9)
return "R";
// 2,5,8,0 일때 어디 손가락이 가까운가
if (getDist(leftPos, num) > getDist(rightPos, num))
return "R";
if (getDist(leftPos, num) < getDist(rightPos, num))
return "L";
// 같으면 손잡이
return this.hand;
}
// 해당 위치와 번호 위치의 거리
private int getDist(int[] pos, int num) {
return Math.abs(pos[0] - numpadPos[num][0]) + Math.abs(pos[1] - numpadPos[num][1]);
}
}
- 각 키패드의 좌표를 지정하여 풀이
Share article