코테/프로그래머스

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

65살까지 코딩 2022. 1. 17. 01:05
728x90
반응형
import java.util.ArrayList;

class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";
        //arrayList 를 좋아해서 배열을 arrayList 로 바꿈
        ArrayList<Integer> arrayList =new ArrayList<>();
        for(int i =0; i<numbers.length; i++){
            //0을 그대로 두면 처리할 수 가없음 그래서 순서에 맞게 11로 바꿔줌
            if(numbers[i] == 0){
                numbers[i] = 11;
            }
            arrayList.add(numbers[i]);
        }
        int number = 0;
        //왼쪽은 *에서 시작하는데 수로 표현하면 10
        int leftNow = 10;
        //오른쪽은 #에서 시작하는데 수로 표현하면12
        int rightNow = 12;
        int leftDistance = 0;
        int rightDistance = 0;
        for(int i =0; i< arrayList.size(); i++){
            number = arrayList.get(i);
            //숫자가 1 4 7 이라면 왼쪽속이
            if(number == 1 || number ==4 || number ==7){
                answer += "L";
                leftNow = number;
            //숫자가 3 6 9 라면 오른손이
            }else if(number == 3 || number ==6 || number ==9) {
                answer += "R";
                rightNow = number;
            }//이 문제 여기까지는 아주 무난한 문제 2 5 8 11 처리할때 if 문으로 하면 너무 복잡 거리로 생각해면 할만함
            else{
                        //세로를 움직때 3을 기준으로 움직인다고 생각했을때 이런식이 나올 수 있음
                leftDistance = (Math.abs(number-leftNow))/3 + (Math.abs(number-leftNow))%3;
                rightDistance = (Math.abs(number-rightNow))/3+ (Math.abs(number-rightNow))%3;
                //길이가 같다면 hand에 따라 바뀜
                if(leftDistance == rightDistance) {
                    if(hand.equals("right")) {
                        answer += "R";
                        rightNow = number;
                    }else {
                        answer += "L";
                        leftNow = number;
                    }
                    // 왼쪽이 더길다면 오른쪽으로 누르고
                }else if(leftDistance > rightDistance) {
                    answer += "R";
                    rightNow = number;
                    //그렇지 않다면 왼쪽으로 누르고~
                }else {
                    answer += "L";
                    leftNow = number;
                }
            }
        }

        return answer;
    }
}

문제 : https://programmers.co.kr/learn/courses/30/lessons/67256

728x90
반응형