문제
문제 풀이
해당 문제에서 가장 고민해야 하는 부분은 2, 5, 8, 0 을 입력할 때 어떻게 그 값과 가까운 위치의 손을 불러오는가 이다.
가운데 값보다 작은 값에 손이 있으면 나누기를 통해 위치를 추적하고, 가운데 값보다 높은 값에 손이 있으면 나머지 값을 통해 계산이 가능하다.
int leftHand = Math.abs(i - left) / 3 + Math.abs(i - left) % 3;
int rightHand = Math.abs(i - right) / 3 + Math.abs(i - right) % 3;
나의 풀이
public static String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
int left = 10;
int right = 12;
for (int i : numbers) {
if (i == 1 || i == 4 || i == 7) {
sb.append("L");
left = i;
} else if (i == 3 || i == 6 || i == 9) {
sb.append("R");
right = i;
} else {
if (i == 0) i = 11;
int leftHand = Math.abs(i - left) / 3 + Math.abs(i - left) % 3;
int rightHand = Math.abs(i - right) / 3 + Math.abs(i - right) % 3;
if (leftHand < rightHand) {
sb.append("L");
left = i;
} else if (rightHand < leftHand) {
sb.append("R");
right = i;
} else {
if ("left".equals(hand)){
sb.append("L");
left = i;
} else {
sb.append("R");
right = i;
}
}
}
}
return sb.toString();
}
'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글
문자열 나누기 (0) | 2023.03.24 |
---|---|
크레인 인형뽑기 게임 (0) | 2023.03.24 |
옹알이 (2) (0) | 2023.03.23 |
카드 뭉치 (0) | 2023.03.23 |
완주하지 못한 선수 (0) | 2023.03.23 |