https://programmers.co.kr/learn/courses/30/lessons/67256
코딩테스트 연습 - 키패드 누르기
[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"
programmers.co.kr
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int leftRow = 3;
int leftCol = 0;
int midRow;
int midCol = 1;
int rightRow = 3;
int rightCol = 2;
for (int i = 0; i < numbers.length; i++) {
int n = numbers[i]; // 현재 누른 번호
if (n == 1 || n == 4 || n == 7) {
leftRow = n / 3;
leftCol = 0;
answer += "L";
} else if (n == 3 || n == 6 || n == 9) {
rightRow = (n / 3) - 1;
rightCol = 2;
answer += "R";
} else { // n == 2 || n == 5 || n == 8 || n == 0
midRow = (n == 0 ? 3 : (n / 3));
// 현재 누른 번호와 왼손 위치, 오른손 위치 각각의 차이 구하기
int leftDistance = Math.abs(midRow - leftRow) + Math.abs(midCol - leftCol);
int rightDistance = Math.abs(midRow - rightRow) + Math.abs(midCol - rightCol);
if (leftDistance < rightDistance) { // 왼쪽이 더 가까운 경우
leftRow = midRow;
leftCol = midCol;
answer += "L";
} else if (leftDistance > rightDistance) { // 오른쪽이 더 가까운 경우
rightRow = midRow;
rightCol = midCol;
answer += "R";
} else { // 거리의 차이가 같은 경우 왼손잡이인지 오른손잡이인지 확인
if (hand.equals("left")) {
leftRow = midRow;
leftCol = midCol;
answer += "L";
} else {
rightRow = midRow;
rightCol = midCol;
answer += "R";
}
}
}
}
return answer;
}
}
'programmers > Java' 카테고리의 다른 글
[programmers] 게임 맵 최단거리 / Java (0) | 2021.10.06 |
---|---|
[programmers] 체육복 / Java (0) | 2021.08.18 |