개발문제풀이
[프로그래머스 Lv.1] 키패드 누르기 JAVA 문제풀이
까잉이
2022. 8. 1. 16:29
풀이순서
1. 키패드 맨 아래 * 0 #을 각각 10, 11, 12로 치환하고 시작시 왼손은 *, 오른손은 #에서 시작하기 때문에
int left와 right에 각각 10, 12으로 초기값을 셋팅한다
2. numbers의 갯수만큼 for문을 돌린다
3. switch를 활용해서 어떤 숫자인지 구분해서 1,4,7인 경우 answer에 "L"을 추가하고 left에 현재 값을 대입시키고,
3,6,9인 경우 answer에 "R"을 추가하고 right에 현재 값을 대입한다
4. 2,5,8,9인 경우에는 left와 right 손가락 중 누가 가까운지 구해야하는데
거리를 계산하기 위해 (Math.abs(누른값-현재 손가락값))/3 + (Math.abs(누른값-현재손가락값))%3 으로 계산한다.
*양수로 변환하기 위해Math.abs()를 추가했다
ex) 누른값 5 / left = 4, right = 3 가정한다면
왼손가락 거리 = (5-4)/3 + (5-4)%3 = 0+1 = 1
오른손가락 거리 = (5-3)/3 + (5-3)%3 = 0+2 = 2
=> 왼손가락이 거리가 더 짧으므로 왼손가락으로 누른다 "L" 추가
5. 만약 거리를 계산 했을때 왼손, 오른손 똑같은 값이면 hand 값이 right 면 "R", left면 "L"로 추가한다.
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int left = 10;
int right = 12;
for(int num : numbers){
switch(num){
case 1: case 4: case 7: answer += "L"; left = num; break;
case 3: case 6: case 9: answer += "R"; right = num; break;
case 2: case 5: case 8: case 0:
if(num==0) num += 11;
int distanceL = (Math.abs(num-left))/3 + (Math.abs(num-left))%3;
int distanceR = (Math.abs(num-right))/3 + (Math.abs(num-right))%3;
if(distanceL > distanceR) {
answer += "R";
right = num;
}else if(distanceL < distanceR) {
answer += "L";
left = num;
}else {
if(hand.equals("left")){
answer += "L";
left = num;
}else{
answer += "R";
right = num;
}
}
break;
}
}
return answer;
}
}