반응형
SMALL
https://programmers.co.kr/learn/courses/30/lessons/67256
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
- 키패드의 *과 #은 편의를 위해 순서대로 10, 12로 지정
- 가운데 키까지의 거리가 가까운 걸로 채택
- 좌표간 거리 구하기
- |x1 - x2| + |y1 - y2|
- 절대값 구하는 함수
- Math.abs()
- 절대값 구하는 함수
class Solution {
public String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
int leftPosition = 10; // *을 10으로 둔 것
int rightPosition = 12; // #을 12로 둔 것
for(int number : numbers) {
if(number == 1 || number == 4 || number == 7) {
sb.append("L");
leftPosition = number;
} else if(number == 3 || number == 6 || number == 9) {
sb.append("R");
rightPosition= number;
} else {
int leftLength = getLength(leftPosition, number); // 좌표간 거리 구하기
int rightLength = getLength(rightPosition, number); // 좌표간 거리 구하기
if(leftLength > rightLength) { // 오른쪽이 더 가까우면
sb.append("R");
rightPosition = number;
} else if(leftLength < rightLength) { // 왼쪽이 더 가까우면
sb.append("L");
leftPosition = number;
} else { // 양 거리가 같으면
if(hand.equals("right")) {
sb.append("R");
rightPosition = number;
} else {
sb.append("L");
leftPosition = number;
}
}
}
}
return sb.toString();
}
public static int getLength(int position, int number) {
// 0은 11로 두어도 상관 X
position = (position == 0) ? 11 : position;
number = (number == 0) ? 11 : number;
int x = (position - 1) / 3; // x좌표 구하는 방법
int y = (position - 1) % 3; // y좌표 구하는 방법
int centerX = number / 3;
int centerY = 1;
// Math.abs()는 절대값
// 좌표라고 생각하고 그 길이 구하는 것
// |x1 - x2| + |y1 - y2|
return Math.abs(x - centerX) + Math.abs(y - centerY);
}
}
반응형
LIST
'JAVA > Algorithm' 카테고리의 다른 글
[프로그래머스/java] 하샤드 수 (숫자 자릿수 각각 더하기) (0) | 2020.12.11 |
---|---|
[프로그래머스/java] 콜라츠 추측 (+ 오답 이유 (feat.자료형범위)) (0) | 2020.12.10 |
[프로그래머스/java] 제일 작은 수 제거하기 (0) | 2020.12.02 |
[프로그래머스/java] 정수 제곱근 판별 (0) | 2020.12.02 |
[프로그래머스/java] 정수 내림차순으로 배치하기 (0) | 2020.12.02 |