[PROGRAMMERS] 키패드 누르기
11285 단어 programmersprogrammers
💡 풀이
public String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
int left = 10;
int right = 12;
for(int number : numbers){
if(number == 1 || number == 4 || number == 7){
sb.append("L");
left = number;
}else if(number == 3 || number == 6 || number == 9){
sb.append("R");
right = number;
}else{
int leftLength = getLength(left, number);
int rightLength = getLength(right, number);
if(leftLength > rightLength){
sb.append("R");
right = number;
}else if(leftLength < rightLength){
sb.append("L");
left = number;
}else{
if(hand.equals("left")){
sb.append("L");
left = number;
}else{
sb.append("R");
right = number;
}
}
}
}
return sb.toString();
}
public static int getLength(int index, int number){
index = (index == 0) ? 11 : index;
number = (number == 0) ? 11 : number;
int xIndex = (index - 1) / 3;
int yIndex = (index - 1) % 3;
int xNumber = number / 3;
int yNumber = 1;
return Math.abs(xIndex - xNumber) + Math.abs(yIndex - yNumber);
}
문제를 풀다가 막혀서 결국 다른 풀이를 참고했다😢
🚨 문제 이해
- 키패드를 좌표로 생각한다.
👉 (0, 0), (0, 1) (0, 2) 등 - number와 left 혹은 right의 x와 y끼리 뺀 다음 더하면 거리이다.
👉 (x - x1) + (y - y1) = 거리 - 왼쪽, 오른쪽 좌표값 규칙
- x좌표 : (숫자-1) / 3
- y좌표 : (숫자-1) % 3
- 중앙 좌표값 규칙
- x좌표 : number / 3
- y좌표 : 1
- 어떤 값이 더 큰지 알 수 없으므로 절대값으로 계산한다.
💡 풀이 설명
- 거리를 계산하기 쉽도록 *, 0, #을 각각 10, 11, 12로 치환한다.
- numbers 배열의 요소를 하나씩 꺼내서 1,4,7 / 3,6,9면 각각 sb에 "L" 혹은 "R"을 추가해주고 위치도 현재 위치로 바꿔준다.
- 만약 2, 5, 8, 0이라면 각각 거리를 구해서 더 가까운 쪽을 sb에 추가하고 만약 거리가 같다면 hand로 결정한 다음 현재 위치를 저장한다.
Author And Source
이 문제에 관하여([PROGRAMMERS] 키패드 누르기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@3hee_11/PROGRAMMERS-키패드-누르기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)