[Programmers] 키패드 누르기

iinnuyh_s·2023년 12월 29일
0

Programmers

목록 보기
4/8
post-thumbnail

키패드 누르기

풀이

  • 농협 코테 대비해서 프로그래머스에서 구현 문제를 풀기로 결심... Level1 도전! 처음 풀 때 생각보다 오래걸렸고^^ㅠ 맞히긴 했지만 코드가 너무 지저분했다...
  • 작년에 파이썬으로 푼 코드를 보고... 그때보다 퇴보한 코드를 보고 반성하며 고쳤다.
  • 배열을 하나 만들어서, 각 키패드 숫자의 (i,j)위치를 저장한다.
  • 조건대로, [2,5,8,0]인 경우 왼손,오른손의 위치를 확인하고 Math.abs() 를 이용해서 거리 비교 후 처리한다.
🤔 정답 풀이
import java.util.*;
import java.io.*;
class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        int[][] list = new int[][]{{3, 1},{0,0},{0,1},{0,2},{1,0},{1,1},{1,2},{2,0},{2,1},{2,2}};
        int leftI=3,leftJ=0,rightI=3,rightJ=2;
        for(int s=0;s<numbers.length;s++){
            int[] pos = list[numbers[s]];
            //pos[0] = i, pos[1] = j;
            int num = numbers[s];
            if(num==1 || num==4 || num==7){
                sb.append("L");
                leftI = pos[0];
                leftJ = pos[1];
            }
            else if(num==2 || num==5 || num==8 || num==0){
                int leftSize = Math.abs(leftI-pos[0])+Math.abs(leftJ-pos[1]);
                int rightSize = Math.abs(rightI-pos[0])+Math.abs(rightJ-pos[1]);
                if(leftSize<rightSize){
                    sb.append("L");
                    leftI = pos[0];
                    leftJ = pos[1];
                }
                else if(leftSize>rightSize){
                    sb.append("R");
                    rightI = pos[0];
                    rightJ = pos[1];
                }
                else{
                    if(hand.equals("left")){
                        sb.append("L");
                        leftI = pos[0];
                        leftJ = pos[1];
                    }
                    else{
                        sb.append("R");
                        rightI = pos[0];
                        rightJ = pos[1];
                    }
                }
            }
            else if(num==3 || num== 6|| num==9){
                sb.append("R");
                rightI = pos[0];
                rightJ = pos[1];
            }
        }
        answer = sb.toString();
        return answer;
    }
}

0개의 댓글