프로그래머스(코딩테스트 연습) - 키패드 누르기
해당 문제를 처음 풀때에는 키패드의 인덱스를 저장한 맵을 미리 선언한 후 해당 패드의 인덱스를 가져와 패드 인덱스를 3으로 나눈 몫과 나머지를 통해 왼손으로 패드를 누를지 오른손으로 패드를 누를지 결정하는 방식으로 풀었습니다.
키패드의 인덱스는 0 부터 시작해 11까지로 정해두고 현재 왼손의 위치 오른손의 위치는 각각 눌러야 하는 키패드의 인덱스를 3으로 나눈 나머지에 따라 0이면 왼손, 1이면 왼손/오른손중 결정(더 가까운 위치는 몫과 나머지를 x,y 좌표라 생각하고 키패드의 몫과 나머지를 각 손 위치의 몫과 나머지와 각각의 차이를 더함)하는 방식으로 풀었습니다.
public String solution(int[] numbers, String hand) {
StringBuilder answer = new StringBuilder();
int currentLeftHand = 9;
int currentRightHand = 11;
for(int number : numbers) {
int padIndex = number == 0 ? 10 : number - 1;
int n = padIndex / 3;
int mod = padIndex % 3;
if (mod == 0) {
answer.append("L");
currentLeftHand = padIndex;
} else if (mod == 1) {
int leftHandLength = Math.abs(n - (currentLeftHand / 3)) + Math.abs(mod - (currentLeftHand % 3));
int rightHandLength = Math.abs(n - (currentRightHand / 3)) + Math.abs(mod - (currentRightHand % 3));
if (leftHandLength < rightHandLength) {
answer.append("L");
currentLeftHand = padIndex;
} else if (leftHandLength > rightHandLength) {
answer.append("R");
currentRightHand = padIndex;
} else if (hand.equals("right")){
answer.append("R");
currentRightHand = padIndex;
} else {
answer.append("L");
currentLeftHand = padIndex;
}
} else {
answer.append("R");
currentRightHand = padIndex;
}
}
return answer.toString();
}
'정리 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 문자열압축 (0) | 2022.03.30 |
---|---|
프로그래머스 - 크레인 인형뽑기 (0) | 2022.03.28 |
프로그래머스 - 숫자 문자열과 영단어 (0) | 2022.03.24 |
프로그래머스 - 신규 아이디 추천 (0) | 2022.03.23 |
해시 - 로또의 최고 순위와 최저 순위 (0) | 2022.03.22 |
댓글