[프로그래머스] 키패드 누르기
2020. 7. 2. 19:29ㆍ프로그래머스/카카오
import java.util.*;
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
String left = "*";
String right = "#";
String[][] phone = {{"1","2","3"},{"4","5","6"},{"7","8","9"},{"*","0","#"}};
for (int i=0; i<numbers.length; i++){
if(numbers[i]==1 || numbers[i]==4 || numbers[i] ==7){
answer+="L";
left = Integer.toString(numbers[i]);
}else if(numbers[i] == 3 || numbers[i]==6 ||numbers[i]==9){
answer+="R";
right = Integer.toString(numbers[i]);
}else{
int leftDistance = calculateDistance(left,numbers[i],phone);
int rightDistance = calculateDistance(right,numbers[i],phone);
if(leftDistance<rightDistance){
answer +="L";
left = Integer.toString(numbers[i]);
}else if (rightDistance<leftDistance){
answer += "R";
right = Integer.toString(numbers[i]);
}else{
if(hand.equals("right")){
answer+="R";
right = Integer.toString(numbers[i]);
}else{
answer+="L";
left = Integer.toString(numbers[i]);
}
}
}
}
return answer;
}
private int calculateDistance(String target, int number, String[][] phone){
int targetX=0;
int targetY=0;
int numberX=0;
int numberY=0;
for(int i=0; i<phone.length; i++){
for(int j=0; j<phone[0].length; j++){
if(phone[i][j].equals(target)){
targetX = i;
targetY = j;
}
if(phone[i][j].equals(Integer.toString(number))){
numberX = i;
numberY = j;
}
}
}
return Math.abs(targetX-numberX) + Math.abs(targetY-numberY);
}
}
1. 폰을 만들고 왼손 오른손위치 초기화.
2. numbers돌면서 1,4,7이면 왼손으로 3,6,9면 오른손으로 누르고 위치변경
3. 2,5,8,0이면 거리를 계산하여 더 짧은 손으로 누르고 위치변경. 이때 같으면 hand에따라 누르고 위치변경
'프로그래머스 > 카카오' 카테고리의 다른 글
[프로그래머스] 보석 쇼핑 (0) | 2020.07.03 |
---|---|
[프로그래머스] 수식 최대화 (0) | 2020.07.02 |
[프로그래머스] 자물쇠와 열쇠 (0) | 2020.05.05 |
[프로그래머스] 프렌즈 4블록 (0) | 2020.05.03 |
[프로그래머스] [1차] 셔틀버스 (0) | 2020.04.28 |