[프로그래머스] 코딩 테스트 연습 - 키패드 누르기(Java)

수경·2022년 12월 5일
0

problem solving

목록 보기
72/174

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

풀이

  1. 1, 4, 7 은 왼손
  2. 3, 6, 9 는 오른손
  3. 2, 5, 8, 0 은 현재 왼손/오른손의 위치 중 더 가까운 손이나, 거리가 같을 경우 hand 손으로 누르면 된다
    3-1. 각 행은 3단위로 나뉘고, 각 열은 1단위로 나뉘는 특성을 고려해서 다음 식을 도출
    거리 = 절댓값(현재 손가락이 위치한 키패드 - 누르려는 키패드) / 3 + 절댓값(현재 손가락이 위치한 키패드 - 누르려는 키패드) % 3

삽질

거리를 알아내는 식을 도출하기가 어려워서

  1. 이걸 그래프로 풀어야하는지
  2. 좌표로 풀어야 하는 지
  3. 냅다 각 키패드마다의 거리를 계산해야 하는지
  4. 어캐어캐 3을 나눠서 푸는 문제같음 근데 how to?

고민을 많이 했다.

결국 구글링함..................

간단한 문제인줄 알았는데 못풀어서 현타맞음


코드

public class PressKeypad {
	public String solution(int[] numbers, String hand) {
		String result = "";
		int left = 10;
		int right = 12;
		for (int n : numbers) {
			if (n == 1 || n == 4 || n == 7) result += "L";
			else if (n == 3 || n == 6 || n == 9) result += "R";
			else if (n == 0 || n == 2 || n == 5 || n == 8) {
				if (n == 0) n = 11;
				int leftDistance = Math.abs(n - left) / 3 + Math.abs(n - left) % 3;
				int rightDistance = Math.abs(n - right) / 3 + Math.abs(n - right) % 3;
				if (leftDistance < rightDistance) result += "L";
				else if (leftDistance > rightDistance) result += "R";
				else {
					if (hand.equals("left")) result += "L";
					else result += "R";
				}
			}
			if (result.charAt(result.length() - 1) == 'L') left = n;
			else right = n;
		}
		return result;
	}

	public static void main(String[] args) {
		PressKeypad pressKeypad = new PressKeypad();

		String output1 = pressKeypad.solution(new int[]{1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5}, "right");
		System.out.println(output1 + " " + output1.equals("LRLLLRLLRRL"));

		output1 = pressKeypad.solution(new int[]{7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2}, "left");
		System.out.println(output1  + " " + output1.equals("LRLLRRLLLRR"));

		output1 = pressKeypad.solution(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, "right");
		System.out.println(output1  + " " + output1.equals("LLRLLRLLRL"));
	}
}
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글