관리 메뉴

MOMONOTE

(JAVA) 키패드 누르기 본문

알고리즘, 코딩테스트/(JAVA)프로그래머스

(JAVA) 키패드 누르기

momo0503 2021. 3. 16. 17:26

 

class Solution {
	public static String solution(int[] numbers, String hand) {
		StringBuilder sb = new StringBuilder();
		int left=10;	 
		int right=12; 

		for(int i=0;i<numbers.length;i++) {
			if(numbers[i]==1 || numbers[i]==4 || numbers[i]==7) { 
				sb.append("L");
				left = numbers[i];
			} else if(numbers[i]==3 || numbers[i]==6 || numbers[i]==9) {	
				sb.append("R");
				right = numbers[i];
			} else { 
				int leftLength = lengthCal(left, numbers[i]);
				int rightLength = lengthCal(right, numbers[i]);

				if(leftLength > rightLength) {
					sb.append("R");
					right = numbers[i];
				} else if(leftLength < rightLength) {
					sb.append("L");
					left = numbers[i];
				} else {
					    if(hand.equals("right")) {
						sb.append("R");
						right = numbers[i];
					    } else {
						sb.append("L");
						left = numbers[i];
					    }
				}
			}
		}
		return sb.toString();
	}//main()

	public static int lengthCal(int hand, int number) {

		if(hand==0){
            hand=11;
        }
        if(number==0){
            number=11;
        }

		int handX=(hand-1)/3; int handY=(hand-1)%3;	
		int numberX=number/3; int numberY=1;
		

		return Math.abs(handX-numberX) + Math.abs(handY-numberY);
	}
}

- numbers배열의 숫자가 1,4,7인경우 StringBuilder에 'L' 추가 3,6,9 인 경우 StringBuilder에 'R' 추가 

- 2,5,8, 인경우 현재 왼손과 오른손의 위치에 따라 거리를 계산하고(lengthCal) 거리가 짧은 손을 추가 .

- 거리가 같다면 오른손잡이, 왼손잡이 경우에 따라 R,L을 알맞게 StringBuilder에 추가 (hand의 여부)

Comments