티스토리 뷰
0~9 * 와 # 문자를 포함한 숫자 키패드 상에서 numbers 배열 내용 순대로 입력 한다고 할때 사용한 손을 리턴하는 문제.
다른 풀이를 보면 다 짧게 풀었지만, 생각나는대로 풀다보니 소스코드도 길고 비효율적인 코드 인거 같다.
현재의 왼손과 오른손의 위치를 기억하기 위해서 변수 선언을 하여 넘겨주는 방식으로 구현하였다.
StringBuilder를 선언해 구현 함수가 리턴하는 결과에 따라 'L' or 'R'을 append 한다.
import java.util.*;
class Solution {
//int[][] phone_num = new int[3][4];
int[][] phone_num = {{1,2,3},{4,5,6},{7,8,9},{-1,0,-2}};
public String solution(int[] numbers, String hand) {
String answer = "";
// insert array
//System.out.println(phone_num[0][2]);
StringBuilder sb = new StringBuilder();
int lefts = -1;
int rights = -2;
for(int i=0; i<numbers.length ; i++){
System.out.println("a"+i);
if(numbers[i]==1||numbers[i]==4||numbers[i]==7){
sb.append("L");
lefts=numbers[i];
}
else if(numbers[i]==3||numbers[i]==6||numbers[i]==9){
sb.append("R");
rights=numbers[i];
}
else{
int ret=0;
ret= rethands(lefts, rights, numbers[i], hand); // distinct left or right ;
//then update position
if(ret==1){ //left
lefts=numbers[i];
sb.append("L");
}
else if(ret==2){ // right
rights = numbers[i];
sb.append("R");
}
else{ //err
}
}
}
// get distance , if same then using hand
System.out.println(sb);
answer = sb.toString();
return answer;
}
public int rethands(int left, int right, int num , String hands){
// return -1 : false , 1 - left , 2 - right
int ret = -1;
int a_x=0;
int a_y=0;
int b_x=0;
int b_y=0;
int n_x=0;
int n_y=0;
for(int i=0; i<4; i++){
for(int j=0; j<3; j++){
if(phone_num[i][j]==left){
a_x=i;
a_y=j;
}
if(phone_num[i][j]==right){
b_x=i;
b_y=j;
}
if(phone_num[i][j]==num){
n_x=i;
n_y=j;
}
}
}
//System.out.println(a_x+","+a_y+","+b_x+","+b_y+","+n_x+","+n_y);
int diff_a = Math.abs(n_x-a_x)+Math.abs(n_y-a_y);
int diff_b = Math.abs(n_x-b_x)+Math.abs(n_y-b_y);
if(diff_a>diff_b){
ret = 2;
}
else if(diff_a==diff_b){
if(hands.compareTo("right")==0){
ret=2;
}
else{
ret =1;
}
}
else{
ret = 1;
}
return ret;
}
}
https://programmers.co.kr/learn/courses/30/lessons/67256
'IT > 프로그래머스' 카테고리의 다른 글
로또의 최고 순위와 최저 순위 - JAVA (0) | 2022.06.23 |
---|---|
[프로그래머스] 음양 더하기 - JAVA (0) | 2022.06.21 |
[있었는데요, 없었습니다] 보호시작일보다 입양일 더 빠른 동물 구하기 (0) | 2022.06.20 |
댓글