[Programmers] 키패드 누르기 - 2020 카카오 인턴십

12291 단어 algorithmalgorithm
// 키패드 누르기 - 2020 카카오 인턴십
public class KeyPad {
	public String solution(int[] numbers, String hand) {
		StringBuilder answer = new StringBuilder("");
		int[][] xy = { { 4, 2 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, { 2, 1 }, { 2, 2 }, { 2, 3 }, { 3, 1 }, { 3, 2 }, { 3, 3 } };
		int left[] = { 4, 1 }, right[] = { 4, 3 }, next[];
		for (int number : numbers) {
			next = xy[number];
			if (number == 1 || number == 4 || number == 7) {
				answer.append("L");
				left = next;
			} else if (number == 3 || number == 6 || number == 9) {
				answer.append("R");
				right = next;
			} else {
				if (distance(left, next) > distance(right, next)) {
					answer.append("R");
					right = next;
				} else if (distance(left, next) < distance(right, next)) {
					answer.append("L");
					left = next;
				} else {
					if (hand.equals("right")) {
						answer.append("R");
						right = next;
					} else {
						answer.append("L");
						left = next;
					}
				}
			}
		}
		return answer.toString();
	}

	private int distance(int[] xy1, int[] xy2) {
		return Math.abs(xy1[0] - xy2[0]) + Math.abs(xy1[1] - xy2[1]);
	}
}

좋은 웹페이지 즐겨찾기