코진남
프로그래머스 키패드 문제 본문
class Solution {
public String solution(int[] numbers, String hand) {
StringBuilder answer = new StringBuilder();
int left = 10;
int right = 12;
for (int num : numbers) {
switch (num) {
case 1 : case 4 : case 7 : {
answer.append("L");
left = num;
break;
}
case 3 : case 6 : case 9 : {
answer.append("R");
right = num;
break;
}
default: {
if (num == 0) num = 11;
int minLeft = left > num ? left - num : num - left;
int minRight = right > num ? right - num : num - right;
int distanceL = (minLeft % 3) + (minLeft / 3);
int distanceR = (minRight % 3) + (minRight / 3);
if (distanceL > distanceR) {
answer.append("R");
right = num;
break;
} else if(distanceR> distanceL) {
answer.append("L");
left = num;
break;
} else {
if (hand.equals("right")) {
answer.append("R");
right = num;
}else {
answer.append("L");
left = num;
}
}
}
}
}
return answer.toString();
}
}
문제접근 1. 번호 1, 4, 7 은 무조건 left
2. 번호 3 ,6 ,9 는 무조건 right
3. 문제를 보니 *, # 은 처음 시작할때 위치 (다시 가는일 없음)
4. 번호 2, 5, 8, 0 은 중간에 위치한 키패드인데, 왼손 오른손 가까이에 위치해있는 손으로 움직임.
그럼여기서 현재 내 왼손, 오른손 위치가 어디에있느냐에 따라 가운데 키패드에 가까운 경로로 접근을 해야하 는경로구하는 규칙을 구해야함
1. 왼손, 오른손 변수를 두고, 현재 손 위치를 기준으로 다음 가까운 번호를 누를 때 변수에 해당하는 손에 이동한 번호를 저장한다.
point. 현재 왼손 오른손 위치에서 다음 번호로 갈 경로 길이를 구해야함
2.왼손 오른손으로부터 같은 거리에 있는 값은 (왼손, 오른손) 잡이로 구분한다.
'코딩테스트' 카테고리의 다른 글
프로그래머스 체육복 (0) | 2022.03.30 |
---|---|
프로그래머스 신고! (0) | 2022.03.26 |
프로그래머스 완주하지 못한 선수 (0) | 2022.03.26 |
프로그래머스 크레인 문제 (0) | 2022.03.22 |
프로그래머스 숫자 문자열과 영단어 (0) | 2022.03.22 |