-
[프로그래머스] (카카오 인턴) 키패드 누르기카테고리 없음 2022. 1. 4. 13:35
문제 설명과 제한사항


풀이
class Solution { public String solution(int[] numbers, String hand) { String answer = ""; int lh = 10; int rh = 12; for(int num : numbers){ if(num == 1||num == 4||num == 7){ answer += "L"; lh = num; } else if (num == 3||num == 6||num == 9){ answer += "R"; rh = num; } else { if(dis(num,lh)>dis(num,rh)){ answer += "R"; rh = num; } else if(dis(num,lh)<dis(num,rh)){ answer += "L"; lh = num; } else { if(hand.equals("right")){ answer += "R"; rh = num; } else if(hand.equals("left")){ answer += "L"; lh = num; } } } } return answer; } public int dis(int pushnum, int handnum){ int distance; int tmp; if(pushnum == 0) pushnum = 11; if(handnum == 0) handnum = 11; int pushtmp = pushnum-1; int handtmp = handnum -1; if(pushnum > handnum){ tmp = pushtmp/3 - handtmp/3; tmp = tmp + Math.abs(pushtmp%3 - handtmp%3); } else if(pushnum < handnum){ tmp = handtmp/3 - pushtmp/3; tmp = tmp + Math.abs(pushtmp%3 - handtmp%3); } else tmp = 0; distance = tmp; return distance; } }++
거리를 계산하는 dis 함수를 먼저 짰다.
이 후 본문
본문 1. for each 사용
2. || 사용 : 멍청하게 num ==1 || 4 || 7 이렇게 쓰고 있었다.
3. lh, rh (현재의 손 위치) 시작이 *, # 이기 때문에 시작점을 임의로 10, 12로 잡았다.
4. 조금 더 간결하고 보기 쉽게 짜고 싶었다.
dis 함수 1. 0에 손 위치를 생각해서 11로 바꾸는 걸 생각 못했다.
2. 거리를 계산 할때 3으로 나눠 몫과 나머지의 차이로 계산 했다.
하지만 3을 나누면 0이 되어 거리 계산에 착오가 생기는 것을 생각 하지 못했다.
그래서 tmp를 만들어 1을 뺀 값으로 계산 했다.
3. Math.abs(int a) : 정수 a (실수도 가능한듯)를 절대값으로 치환해서 반환한다.
생각 하지 못한 부분이 많아 굉장히 오래 걸렸다..