알고리즘
[카카오 인턴] 키패드 누르기 - java
minkang
2021. 4. 30. 22:23
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) {
int phone[][] = new int[12][2];
// 폰 넘버의 좌표
for (int i = 1; i <= 9; i++) {
phone[i][0] = (i - 1) / 3 + 1;
phone[i][1] = i % 3 == 0 ? 3 : i%3;
}
phone[0][0] = 4;
phone[0][1] = 2;
phone[10][0] = 4;
phone[10][1] = 1;
phone[11][0] = 4;
phone[11][1] = 3;
int leftNumber = 10;
int rightNumber = 11;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < numbers.length; i++) {
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) {
leftNumber = numbers[i];
sb.append("L");
continue;
}
else if( numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {
rightNumber = numbers[i];
sb.append("R");
continue;
}
int left = distance(numbers[i], leftNumber, phone);
int right = distance(numbers[i], rightNumber, phone);
if(left == right) {
if(hand.equals("left")) {
leftNumber = numbers[i];
sb.append("L");
}
else {
rightNumber = numbers[i];
sb.append("R");
}
}
else if(left < right) {
leftNumber = numbers[i];
sb.append("L");
}
else {
rightNumber = numbers[i];
sb.append("R");
}
}
String answer = sb.toString();
return answer;
}
private int distance(int number, int prevNumber, int[][] phone) {
return Math.abs(phone[number][0] - phone[prevNumber][0]) +Math.abs(phone[number][1]- phone[prevNumber][1]);
}
}
phone 배열에 각 번호의 좌표를 담고 로직에 맞게 구현했습니다.