비버놀로지

[Programmers 프로그래머스] 67256 키패드 누르기 본문

ALGORITM/JAVA

[Programmers 프로그래머스] 67256 키패드 누르기

KUNDUZ 2021. 1. 8. 10:03
728x90

programmers.co.kr/learn/courses/30/lessons/67256

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

Point를 이용해서 각각의 숫자의 위치값을 저장해서 문제를 풀었다. 0번의 위치가 (3,1), 1번의 위치가 (0,0)이런식으로 넣어준후, 각각의 키패드를 누르게 됬을때 불러와 사용한다.

 

중간에 있는 키패드를 누를때에는 가까이 있는 손으로 눌러야 하는데, 그 가까운 손을 찾는 방법은 키패드의 좌표값과

 

손의 위치 좌표값의 차이를 비교를 해서 가까운 손을 찾도록 했다.

그런데 거리가 가깝다면 입력에서 왼손잡이인지 오른손잡이인지 확인을 하고 해당하는 손으로 누를수 있도록 했다.

class Solution {
    public String solution(int[] numbers, String hand) {
		String answer = "";
		Point arr[]= {new Point(3,1),new Point(0,0),new Point(0,1),new Point(0,2),new Point(1,0),new Point(1,1),new Point(1,2),new Point(2,0),new Point(2,1),new Point(2,2)};

		Point left = new Point(3, 0);
		Point right = new Point(3, 2);
		for (int i = 0; i < numbers.length; i++) {
			if (numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) {	//왼손으로 누르기
				answer = answer.concat("L");
				if (numbers[i] == 1) {
					left.x = 0;
					left.y = 0;
				} else if (numbers[i] == 4) {
					left.x = 1;
					left.y = 0;
				} else if (numbers[i] == 7) {
					left.x = 2;
					left.y = 0;
				}
			} else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {	//오른손으로 누르기
				answer = answer.concat("R");
				if (numbers[i] == 3) {
					right.x = 0;
					right.y = 2;
				} else if (numbers[i] == 6) {
					right.x = 1;
					right.y = 2;
				} else if (numbers[i] == 9) {
					right.x = 2;
					right.y = 2;
				}
			}
			else {								//가까운 손을 찾아 누르기
				int l=Math.abs(left.x-arr[numbers[i]].x)+Math.abs(left.y-arr[numbers[i]].y);
				int r=Math.abs(right.x-arr[numbers[i]].x)+Math.abs(right.y-arr[numbers[i]].y);
				if(l==r) {
					if(hand.equals("right")) {
						answer=answer.concat("R");
						right.x = arr[numbers[i]].x;
						right.y = arr[numbers[i]].y;
					}else {
						answer=answer.concat("L");
						left.x = arr[numbers[i]].x;
						left.y = arr[numbers[i]].y;
					}
				}else if(l<r) {
					answer=answer.concat("L");
					left.x = arr[numbers[i]].x;
					left.y = arr[numbers[i]].y;
				}else {
					answer=answer.concat("R");
					right.x = arr[numbers[i]].x;
					right.y = arr[numbers[i]].y;
				}
			}
		}
        return answer;
    }
}
	class Point {
		int x, y;

		public Point(int x, int y) {
			super();
			this.x = x;
			this.y = y;
		}

	}
728x90
Comments