프로그래머스 키패드 누르기

작성자 : 조회수 :

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


{1, 2, 7} 은 무조건 왼손 L

{3, 6, 9} 는 무조건 오른손 R

그리고  {2, 5, 8, 9}는 마지막으로 위치한 왼손, 오른손 포지션 중 가장 가까운 손가락이 누르는 걸로 R, L이며

 

거리가 똑같다면 오른손잡이면 R , 왼손잡이면 L 이렇게 출력해줍니다. 예시를 보면 



이렇게 나옵니다.

 

제가 작성한 코드는

(주의,문제를 풀고있어 정신없어서 미쳐 확인 못했으나 rlangth가아니라 length였습니다양해부탁드립니다. )

 

Rpoint간의 거리를 저장해두고싶었습니다.

 

package week1;

import java.util.ArrayList;

public class Cellphone {

public static void main(String[] args) {

int[] inNumbers = {1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5};
String hand = "right";

System.out.println(solution(inNumbers,hand));
}

// 2 5 8 0

public static String solution(int[] numbers, String hand) {

int[] lpoint = {3,0};
int[] rpoint = {3,2};
int[] point = {0,0};

int llength = 3;
int rlangth = 3;

String answer = "";
for (int i =0; i< numbers.length ; i++) {
llength = 3;
rlangth = 3;
int number = numbers[i];

if(numbers[i]== 1 || numbers[i] ==4 || numbers[i] ==7){

if(numbers[i] == 1){
lpoint = new int[]{0 ,0};
}
if(numbers[i] == 4){
lpoint = new int[]{1 ,0};
}
if(numbers[i] == 7){
lpoint = new int[]{2 ,0};
}
answer += "L";

} else if(numbers[i]== 3 || numbers[i] ==6 || numbers[i] ==9){

if(numbers[i] == 3){
rpoint = new int[]{0 ,2};
}
if(numbers[i] == 6){
rpoint = new int[]{1 ,2};
}
if(numbers[i] == 9){
rpoint = new int[]{2 ,2};
}
answer += "R";
}else if(numbers[i]== 2 || numbers[i] ==5 || numbers[i] ==8 || numbers[i] ==0){

if(numbers[i] == 2){
point = new int[]{0 ,1};
}
if(numbers[i] == 5){
point = new int[]{1 ,1};
}
if(numbers[i] == 8){
point = new int[]{2 ,1};
}
if(numbers[i] == 0){
point = new int[]{3 ,1};
}

llength = Math.abs(lpoint[0] - point[0]) + Math.abs(lpoint[1] - point[1]);
rlangth = Math.abs(rpoint[0] - point[0]) + Math.abs(rpoint[1] - point[1]);

if(llength == rlangth){
if (hand.equals("right")){
rpoint = new int[]{point[0],point[1]};
answer+= "R";
}if (hand.equals("left")){
lpoint = new int[]{point[0],point[1]};
answer+= "L";
}
} else if(rlangth < llength){
rpoint = new int[]{point[0],point[1]};
answer+= "R";
} else {
lpoint = new int[]{point[0],point[1]};
answer+= "L";
}

}

}

return answer;
}

}




풀이


입력해야 하는 번호별로 좌표를 기억하도록 만들었습니다.



시작은 * # 이기 때문에 {3,0} {3,2}를 가집니다.


각 좌표간 거리를 구해줍니다.

 

단순한 x,y끼리의 절댓값으로 거리를 구했습니다.



결과



소감

 

일단 풀기에만 급급했던 것 같습니다. 풀기만 급급했던 것 같아서 매우 아쉬운 문제풀이 였습니다.

 

더 열심히 노력하겠습니다.