[JAVA 문제 풀이] 314. 키패드 누르기

프로그래머스 (67256)
Stupefyee's avatar
Jun 12, 2025
[JAVA 문제 풀이] 314. 키패드 누르기
notion image
notion image
 

내가 작성한 코드

class Solution { public String solution(int[] numbers, String hand) { StringBuilder answer = new StringBuilder(); int left = 10; // 왼손 기본 위치 (* 키패드 위치) int right = 12; // 오른손 기본 위치 (# 키패드 위치) for (int i = 0; i < numbers.length; i++) { int number = numbers[i]; // 0은 11로 처리 >> 키패드 위치 편의 상 변경 if (number == 0) { number = 11; } // 1 4 7 if(number % 3 == 1) { answer.append("L"); left = number; // 왼손 위치 업데이트 } // 3 6 9 if (number % 3 == 0) { answer.append("R"); right = number; // 오른손 위치 업데이트 } // 2 5 8 0 if (number % 3 == 2) { // 맨해튼 거리 공식 >> 격자(바둑판) 위에서 두 점 사이의 거리 구하는 공식 >> 행 차이 + 열 차이 int leftDistance = Math.abs(left - number) / 3 + Math.abs(left - number) % 3; int rightDistance = Math.abs(right - number) / 3 + Math.abs(right - number) % 3; if (leftDistance > rightDistance) { answer.append("R"); right = number; // 오른손 위치 업데이트 } if (leftDistance < rightDistance) { answer.append("L"); left = number; // 왼손 위치 업데이트 } if (leftDistance == rightDistance) { if (hand.equals("right")) { answer.append("R"); right = number; // 오른손 위치 업데이트 } else { answer.append("L"); left = number; // 왼손 위치 업데이트 } } } } return answer.toString(); } }
 

다른 사람의 코드

class Solution { // 0부터 9까지 좌표 {y,x} int[][] numpadPos = { { 3, 1 }, // 0 { 0, 0 }, // 1 { 0, 1 }, // 2 { 0, 2 }, // 3 { 1, 0 }, // 4 { 1, 1 }, // 5 { 1, 2 }, // 6 { 2, 0 }, // 7 { 2, 1 }, // 8 { 2, 2 } // 9 }; // 초기 위치 int[] leftPos = { 3, 0 }; int[] rightPos = { 3, 2 }; String hand; public String solution(int[] numbers, String hand) { this.hand = (hand.equals("right")) ? "R" : "L"; // 손잡이 설정 String answer = ""; for (int num : numbers) { String Umji = pushNumber(num); answer += Umji; if (Umji.equals("L")) { leftPos = numpadPos[num]; continue; } if (Umji.equals("R")) { rightPos = numpadPos[num]; continue; } } return answer; } // num버튼을 누를 때 어디 손을 사용하는가 private String pushNumber(int num) { if (num == 1 || num == 4 || num == 7) return "L"; if (num == 3 || num == 6 || num == 9) return "R"; // 2,5,8,0 일때 어디 손가락이 가까운가 if (getDist(leftPos, num) > getDist(rightPos, num)) return "R"; if (getDist(leftPos, num) < getDist(rightPos, num)) return "L"; // 같으면 손잡이 return this.hand; } // 해당 위치와 번호 위치의 거리 private int getDist(int[] pos, int num) { return Math.abs(pos[0] - numpadPos[num][0]) + Math.abs(pos[1] - numpadPos[num][1]); } }
  • 각 키패드의 좌표를 지정하여 풀이
Share article

stupefyee