https://programmers.co.kr/learn/courses/30/lessons/67256
숫자의 키패드에서 어떤 손이 입력하는지를 맞추는 문제.
사용자는 왼손잡이 혹은 오른손잡이고
왼손은 *
에서 오른손은 #
위치에서 문제가 시작된다.
1,4,7
은 왼손이, 3,6,9
는 오른손이 입력하고,
2,5,8,0
은 각 손 중 더 가까운 손이 입력하고 만얀 거리가 같다면, 왼손잡이라면 왼손 오른손 잡이라면 오른손.
문제를 풀기 위해
순 으로 문제를 풀었다.
static int[][] hands = {
{' ', '1', '2', '3'},
{' ', '4', '5', '6'},
{' ', '7', '8', '9'},
{' ', '*', '0', '#'}
};
거리를 계산하기 위해 2차원 배열로 선언했다.
public String solution(int[] numbers, String hand) {
for (int i : numbers) {
if (i == 1 || i == 4 || i == 7) {
sb.append("L");
L = i;
continue;
} else if (i == 3 || i == 6 || i == 9) {
sb.append("R");
R = i;
continue;
}
}
}
static int getDistance(int source, int dest) {
int r = dest / 3;
int c = dest % 3;
if (c == 0) {
c = 3;
}
int nr = source / 3;
int nc = source % 3;
if (nc == 0) {
nr--;
nc = 3;
}
return Math.abs(r - nr) + Math.abs(c - nc);
}
각각 손마다 거리를 계산해 비교했다.
<전체 코드>
class Solution {
static int[][] hands = {
{' ', '1', '2', '3'},
{' ', '4', '5', '6'},
{' ', '7', '8', '9'},
{' ', '*', '0', '#'}
};
public String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
int L, R, dl, dr;
dr = dl = 0;
L = 10;
R = 12;
for (int i : numbers) {
if (i == 1 || i == 4 || i == 7) {
sb.append("L");
L = i;
continue;
} else if (i == 3 || i == 6 || i == 9) {
sb.append("R");
R = i;
continue;
}
if (i == 0) {
i = 11;
}
dl = getDistance(L, i);
dr = getDistance(R, i);
if (dl < dr) {
L = i;
sb.append("L");
} else if (dr < dl) {
R = i;
sb.append("R");
} else {
if (hand.equals("left")) {
L = i;
sb.append("L");
} else {
R = i;
sb.append("R");
}
}
}
return sb.toString();
}
static int getDistance(int source, int dest) {
int r = dest / 3;
int c = dest % 3;
if (c == 0) {
c = 3;
}
int nr = source / 3;
int nc = source % 3;
if (nc == 0) {
nr--;
nc = 3;
}
return Math.abs(r - nr) + Math.abs(c - nc);
}
}