문제풀이/코딩테스트
프로그래머스 키패드 누르기 [Java]
gyungmean
2022. 2. 15. 18:18
문제출처
https://programmers.co.kr/learn/courses/30/lessons/67256
3가지로 나눠서 풀어야겠다고 생각했다.
-1, 4, 7 => 무조건 왼손
-3, 6, 9 => 무조건 오른선
-2, 5, 8, 0 => 거리 측정
*, 0, #은 각각 10, 11, 12로 바꿔서 생각함
길이는 왼손이 있을 수 있는 위치 1, 4, 7, 11과 2, 5, 8, 0으로 나누어서 생각했다. 오른손도 마찬가지
1, 4, 7, 11일때는 가운데로 한칸 이동한다고 가정한 후 가운데에서 2, 5, 8, 0까지의 위치를 계산
오른손의 경우에도 마찬가지로 계산 후 각각 거리를 구한다.
거리끼리 비교 후 할일을 해주면 끝
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int now_left = 10, now_right = 12;
for(int n : numbers){
if(n == 0) {n = 11;}
if(n == 1 || n == 4 || n == 7){
answer += "L";
now_left = n;
}
else if(n == 3 || n == 6 || n == 9){
answer += "R";
now_right = n;
}
else{
int left_d, right_d;
if(now_left == 1 || now_left == 4 || now_left == 7 || now_left == 10){
if(Math.abs(now_left - n) == 1){
left_d = 1;
}
else{
left_d = Math.abs((now_left + 1) - n) / 3 + 1;
}
}
else{
left_d = Math.abs(now_left - n) / 3;
}
if(now_right == 3 || now_right == 6 || now_right == 9 || now_right == 12){
if(Math.abs(now_right - n) == 1){
right_d = 1;
}
else{
right_d = Math.abs((now_right - 1) - n) / 3 + 1;
}
}
else{
right_d = Math.abs(now_right - n) / 3;
}
if(left_d == right_d){
if(hand.equals("left")){
answer += "L";
now_left = n;
}
else{
answer += "R";
now_right = n;
}
}
else{
if(left_d < right_d){
answer += "L";
now_left = n;
}
else{
answer += "R";
now_right = n;
}
}
}
}
return answer;
}
}
다른 풀이를 보니 좌표 형식으로 푸는 방법도 있고, 나랑 비슷한 방법도 있고 뭐가 더 좋은 풀이인지 아직 판별하기 어렵다... 오늘은 우선 여기서 끝