알고리즘 문제 풀이 / 프로그래머스 (programmers) - 키패드 누르기
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/67256
문제 풀이
키패드 위치의 좌표를 배열로 만든다.
거리가 더 가까운 손의 좌표를 갱신해준다.
2,5,8,0 번은 왼손과 오른손 중 가까운 손으로 눌러야 하므로 좌표를 이요해야겠다는 생각을 했다. 그래서 배열 인덱스에는 키패드 번호를, 값에는 키패드 좌표를 넣어주었다. 이렇게 했을 때 keypad[n][0] 위치에 있는 값은 왼손이, keypad[n][2]는 오른손이 하는 것이고 1일때만 판별하면 된다. 거리가 같을 땐 hand에 의해 결정되므로 hand값을 설정해두고 풀면 쉽게 풀 수 있다.
public static String solution(int[] numbers, String hand) {
String answer = "";
int[][] keypad = {{3,1},{0,0},{0,1},{0,2},{1,0},{1,1},{1,2},{2,0},{2,1},{2,2},{3,0},{3,2}};
int[] left = keypad[10];
int[] right = keypad[11];
hand = hand.equals("right") ? "R" : "L";
for(int i = 0; i < numbers.length; i++) {
int[] next = keypad[numbers[i]];
if(next[1] == 0) {
answer += "L";
}else if(next[1] == 2) {
answer += "R";
}else {
int le = Math.abs(next[0] - left[0]) + Math.abs(next[1] - left[1]);
int ri = Math.abs(next[0] - right[0]) + Math.abs(next[1] - right[1]);
if(le==ri) {
answer += hand;
}else {
answer += le < ri ? "L" : "R";
}
}
if(answer.charAt(i)=='L') {
left = next;
}else {
right = next;
}
}
return answer;
}
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers/Summer,Winter Coding 2018] 스킬트리 - Java (0) | 2021.07.03 |
---|---|
[Programmers/Lv2] 주식가격 - Java (0) | 2021.06.21 |
[프로그래머스(programmers)] (Summer/Winter Coding 2018) 영어 끝말잇기 (0) | 2021.06.17 |
[프로그래머스(programmers)] (Lv2) 피보나치 수 (0) | 2021.06.13 |
[프로그래머스(programmers)] (Lv2) 행렬의 곱셈 (0) | 2021.06.12 |
댓글