java 프로그래머스 _키패드 누르기
2021. 5. 5. 00:57ㆍ프로그래머스 알고리즘/코딩 테스트 문제
반응형
출제 링크 : 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
class Solution {
public String solution(int[] numbers, String hand) {
StringBuilder answer = new StringBuilder();
int l_position = 10; // *
int r_position = 12; // #
for (int number : numbers) {
// 왼쪽 손 번호들
if (number == 1 || number == 4 || number == 7) {
answer.append("L");
l_position = number;
}
// 오른쪽 손 번호들
else if (number == 3 || number == 6 || number == 9) {
answer.append("R");
r_position = number;
}
// 중간 번호들
else {
// 좌표 거리 구하기
int l_length = getLength(l_position, number);
int r_length = getLength(r_position, number);
// 오른쪽이 가까우면
if (l_length > r_length) {
answer.append("R");
r_position = number;
}
// 왼쪽이 가까우면
else if (l_length < r_length) {
answer.append("L");
l_position = number;
}
// 거리가 같으면
else {
if (hand.equals("right")) {
answer.append("R");
r_position = number;
} else {
answer.append("L");
l_position = number;
}
}
}
}
return answer.toString();
}
public int getLength(int position, int number) {
// 특수문자는 나오지 않으므로 0일 경우 11로 변경
position = (position == 0) ? 11 : position;
number = (number == 0) ? 11 : number;
int x = (position - 1) / 3;
int y = (position - 1) % 3;
int centerX = number / 3;
int centerY = 1;
return Math.abs(x - centerX) + Math.abs(y - centerY);
}
}
반응형