알고리즘/프로그래머스

[프로그래머스]JAVA - Level 1. 키패드 누르기

K.두부 2022. 4. 6. 22:57
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
// 초기 엄지손가락 위치 설정 *(0,3), #(2,3)
int lx = 0;
int ly = 3;
int rx = 2;
int ry = 3;
for (int i=0; i<numbers.length; i++) {
switch (numbers[i]) {
// 왼쪽 엄지손가락
case 1, 4, 7:
answer += "L";
lx = 0;
ly = numbers[i] / 3;
break;
// 오른쪽 엄지손가락
case 3, 6, 9:
answer += "R";
rx = 2;
ry = (numbers[i] / 3) - 1;
break;
case 0, 2, 5, 8:
int x = 1;
int y = 0;
if (numbers[i] == 0) {
y = 3;
} else {
y = numbers[i] / 3;
}
int chklx = Math.abs(lx - x);
int chkly = Math.abs(ly - y);
int chkrx = Math.abs(rx - x);
int chkry = Math.abs(ry - y);
// 왼쪽 엄지손가락이 더 가까움
if (chklx + chkly < chkrx + chkry) {
answer += "L";
lx = x;
ly = y;
// 오른쪽 엄지손가락이 더 가까움
} else if (chklx + chkly > chkrx + chkry) {
answer += "R";
rx = x;
ry = y;
} else if (chklx + chkly == chkrx + chkry) {
if (hand.equals("right")) {
answer += "R";
rx = x;
ry = y;
} else {
answer += "L";
lx = x;
ly = y;
}
}
break;
}
}
return answer;
}
}

 

 

반응형