코딩테스트/프로그래머스

[키패드 누르기]

애플쩀 2022. 6. 14. 07:28
package soltest;

import java.util.Iterator;
//case문으로 L=1,4,7,* / R= 3,6,9,# 나누기 
//처음에는 쉽게 값-값으로 구하려고 햇으나 
//왼손위치 :4 , 오른손위치:2 -> 눌러야할것 5 
//이 예제를 보니 안될 것같아 자리 배열을 만들어주기 
//2,5,8,0은 거리를 계산해서, 거리가 같다면 --손잡이로 
//정답은 string 문자열에 추가 

public class Soltest4 {
	public String solution(int[] numbers, String hand) {
    	//어떤 손잡이인지,넣어주기 
    	String hands= (hand.equals("left"))? "L":"R";
    	String answer = "";
        
    	//오른손 왼손 초치 위치 등록
    	int leftPos=10; //*
    	int rightPos=12; //#
    	
    	//*은 10, 0은 11, #은 12 
        
        //값을 가져올 때 어려운것같아서 바꿈 
       	//각각의 숫자에 -1한 것에 ,3으로 나눈 몫, 3으로 나눈 나머지
//  	int[][] numPos= {{0,0},{0,1},{0,2},
//   									{1,0},{1,1},{1,2},
//   									{2,0},{2,1},{2,2},
//   									{3,0},{3,1},{3,2 }};
    
   
    	//기본적인 룰 위치 등록 , 2580은 위치계산 
    	//기본적인 룰 등록 , 2580 defualt로 빼서  위치계산
        //for문을 넘버 길이만큼 돌려주고, 
    	for (int i = 0; i < numbers.length; i++) {
				switch(numbers[i]) { //스위치로 
				case 1: case 4: case 7: //이거는 왼쪽값이니까 
						answer+="L"; //반환할 answer에 추가해주고 
						leftPos=numbers[i]; //왼손에 마지막위치 저장 
						break;
				case 3: case 6: case 9: //이거는 오른손이니까 
					answer+="R";  //반환할 answer에 추가해주고 
					rightPos=numbers[i]; //오른손에 마지막위치 저장 
					break;
				default: //2,5,8,0
					if(numbers[i]==0) numbers[i]=11; //0은 11로 처리 
	//키패드가 위아래로 3차이, 양옆으로 1차이인 것을 이용해서 아래와 같이 거리를 구하는 식을 이용
					int leftDis=(Math.abs(numbers[i]-leftPos))/3+(Math.abs(numbers[i]-leftPos))%3;
					int rightDis=(Math.abs(numbers[i]-rightPos))/3+(Math.abs(numbers[i]-rightPos))%3;
				//왼쪽이 차이가 작으면  위에처럼 대입해주고 
                if(leftDis<rightDis) { answer+="L"; leftPos=numbers[i];}
                //반대로 오른쪽이 거리가 작을때 
					else if(leftDis>rightDis) {answer+="R"; rightPos=numbers[i];}
					else if(leftDis==rightDis) {//거리가 같다면 손잡이에 따라 값을 대입해주고 
						if(hands.equals("L")) { answer+="L"; leftPos=numbers[i];}
						else  {answer+="R"; rightPos=numbers[i];}
					}
				}
		}
        return answer; //답반환 
    }
}
//
//int leftDis=(Math.abs(numbers[i]-leftPos));
//int rightDis=(Math.abs(numbers[i]-rightPos));
//왼 4, 오 2 눌러야하는것 5 했을때 정답은 거리가 같은데,
//저렇게 하면 거리가 왼쪽 1, 오른쪽 3 이렇게 차이나서 왼쪽이 더 가깝다고 계산됨