반응형
https://programmers.co.kr/learn/courses/30/lessons/67256?language=java
코딩테스트 연습 - 키패드 누르기
[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
import java.util.ArrayList;
import java.util.List;
public class Solution {
static Keypad[] keypad = new Keypad[10];
static int[][] map = new int[4][3];
static Keypad left = new Keypad(3, 0);
static Keypad right = new Keypad(3, 2);
public static String solution(int[] numbers, String hand) {
String answer = "";
int n = 1;
keypad[0] = new Keypad(3, 1);
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
keypad[n++] = new Keypad(i, j);
}
}
for(int i=0; i<numbers.length; i++) {
int cur = numbers[i];
String st = null;
if(cur == 1 || cur == 4 || cur == 7) {
st = "left";
} else if(cur == 3 || cur == 6 || cur == 9) {
st = "right";
} else { // 2, 5, 8, 0
int rightLen = calc(right, keypad[cur]);
int leftLen = calc(left, keypad[cur]);
if(rightLen < leftLen) { // 오른손과의 거리가 더 짧으면
st = "right";
} else if(leftLen < rightLen) { // 왼손과의 거리가 더 짧으면
st = "left";
} else { // 거리가 같으면
st = hand;
}
}
if(st.equals("right")) {
right.x = keypad[cur].x;
right.y = keypad[cur].y;
answer += "R";
} else {
left.x = keypad[cur].x;
left.y = keypad[cur].y;
answer += "L";
}
}
return answer;
}
static int calc(Keypad hand, Keypad location) { // 손에서 위치까지 거리를 구하는 함수
return Math.abs(hand.x-location.x) + Math.abs(hand.y-location.y);
}
static class Keypad {
int x;
int y;
Keypad(int x, int y){
this.x=x;
this.y=y;
}
}
}
반응형
'알고리즘 > 카카오' 카테고리의 다른 글
2019 카카오 개발자 겨울 인턴십 - 튜플 (0) | 2020.09.05 |
---|---|
2020 KAKAO BLIND RECRUITMENT - 괄호 변환 (0) | 2020.08.30 |
오픈채팅방 (0) | 2020.05.29 |
비밀지도 (0) | 2020.05.26 |
다트게임 (0) | 2020.05.24 |