🖇️ 문제 링크
코딩테스트 연습 - 키패드 누르기
스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨 처음 왼손 엄지손가락은* 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.


📝 문제 분석
키패드의 번호들마다 좌표를 부여합니다.
1, 4, 7번을 눌러야 한다면 왼손, 3, 6, 9번을 눌러야 한다면 오른손을 사용하고 나머지를 누를 때는 현재 왼손과 오른손 중 가까운 손으로 누릅니다.
⌨️ 코드
class Solution {
public String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
int[][] button = {{3, 1}, {0, 0}, {0, 1}, {0, 2}, {1, 0}, {1, 1}, {1, 2}, {2, 0}, {2, 1}, {2, 2}};
int[] L = {3, 0}, R = {3, 2};
for(int num : numbers) {
int[] next = button[num];
if(num == 1 || num == 4 || num == 7) {
sb.append("L");
L = next;
} else if(num == 3 || num == 6 || num == 9) {
sb.append("R");
R = next;
} else {
int ld = Math.abs(next[0] - L[0]) + Math.abs(next[1] - L[1]);
int rd = Math.abs(next[0] - R[0]) + Math.abs(next[1] - R[1]);
if(ld == rd) {
if(hand.equals("right")) {
sb.append("R");
R = next;
}
else {
sb.append("L");
L = next;
}
} else if(ld > rd) {
sb.append("R");
R = next;
} else {
sb.append("L");
L = next;
}
}
}
return sb.toString();
}
}
Uploaded by Notion2Tistory v1.1.0