알고리즘
[2020 카카오 인턴십] 키패드 누르기- java
육빔
2024. 7. 24. 20:03
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/67256
문제 설명
왼손, 오른손 기준으로 키패드에 어떤 손이 더 가까운지 찾아서 return해주는 문제
조건은 왼손, 오른손을 따지고 움직인 현재 손의 위치를 저장하여 가까운 거리를 반환
풀이
left, right 배열에 각각 있으면 무조건 left, right 반환 후 result에 더해주고 만약 그 사이라면 거리를 계산 후 값을 result에 더해준다.
코드
class Solution {
public String solution(int[] numbers, String hand) {
int[] left = {1, 4, 7};
int[] right = {3, 6, 9};
int[] mid = {2, 5, 8, 0};
int hand_left = 10; // '*' 키패드 위치 (10으로 간주)
int hand_right = 12; // '#' 키패드 위치 (12으로 간주)
String result = "";
for(int cur : numbers){
int flag = 0;
for(int i = 0; i < left.length; i++){
if(cur == left[i]){
result += "L";
hand_left = cur;
flag = 1;
break;
}
}
for(int i = 0; i < right.length; i++){
if(cur == right[i]){
result += "R";
hand_right = cur;
flag = 1;
break;
}
}
if(flag == 1) continue;
if (cur == 0) cur = 11; // 0을 11로 간주하여 위치 조정
// 왼손과의 거리와 오른손과의 거리를 계산
int leftDistance = Math.abs(cur - hand_left) / 3 + Math.abs(cur - hand_left) % 3;
int rightDistance = Math.abs(cur - hand_right) / 3 + Math.abs(cur - hand_right) % 3;
// 왼손이 가까운 경우
if (leftDistance < rightDistance) {
result += "L";
hand_left = cur;
// 오른손이 가까운 경우
} else if (leftDistance > rightDistance) {
result += "R";
hand_right = cur;
// 거리가 같은 경우
} else {
// 왼손잡이인 경우
if (hand.equals("left")) {
result += "L";
hand_left = cur;
// 오른손잡이인 경우
} else {
result += "R";
hand_right = cur;
}
}
}
return result;
}
}
완성
728x90
반응형