-
[프로그래머스] 키패트 누르기 자바 좌표 절대값코딩테스트 2025. 4. 5. 10:52반응형
https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
주어진 numbers에 따라 핸드폰 키패드를 누를 때, 1,4,7은 왼손엄지, 3,6,9는 오른쪽엄지, 2,5,8,0은 두 손가락 중 가까운 손가락으로 누른다. 단 두 손가락 중 거리가 같다면 주 사용 손으로 누른다. 손가락은 상하좌우로만 움직일 수 있으며 키패드 이동 한 칸은 거리 1에 해당한다. 이 때, numbers를 누른 손가락을 표현하는 LR형태로 반환하시오.
제한사항
최초 손가락 위치는 왼손 : * , 오른손 : # 이다.
접근
numbers의 각 숫자별로 입력 손가락을 판별하고 그 후 입력위치를 갱신해야 2 5 8 0 입력시 거리 계산을 할 수 있다.
이를 위해 좌표 시스템을 구현해야 하고, 숫자별로 좌표정보를 얻을 Map에 키패드별 좌표정보를 담았다.
그리고 별도로 왼손과 오른손의 좌표정보를 따로 배열로 관리하였다.
public String solution2(int[] numbers, String hand){ Map<Integer, Integer[]> keypadMap = new HashMap<>(); for(int i = 0; i < 10; i++){ int row = i / 3; int col = 0; if(i == 0){ row = 3; col = 1; } else if(i == 1 || i == 4 || i == 7){ col = 0; } else if(i == 3 || i == 6 || i == 9){ row -= 1; col = 2; } else { col = 1; } Integer[] p = new Integer[]{row, col}; keypadMap.put(i, p); } Integer[] leftPos = {3, 0}; Integer[] rightPos = {3, 2}; StringBuilder answer = new StringBuilder(); boolean isRightHanded = hand.equals("right"); for (int num : numbers) { Integer[] targetPos = keypadMap.get(num); char usedHand; if (num == 1 || num == 4 || num == 7) { usedHand = 'L'; } else if (num == 3 || num == 6 || num == 9) { usedHand = 'R'; } else { // 2, 5, 8, 0인 경우 거리 계산 assert leftPos != null; int leftDist = Math.abs(leftPos[0] - targetPos[0]) + Math.abs(leftPos[1] - targetPos[1]); assert rightPos != null; int rightDist = Math.abs(rightPos[0] - targetPos[0]) + Math.abs(rightPos[1] - targetPos[1]); if (leftDist < rightDist) { usedHand = 'L'; } else if (rightDist < leftDist) { usedHand = 'R'; } else { usedHand = isRightHanded ? 'R' : 'L'; } } // 손 위치 업데이트 if (usedHand == 'L') { leftPos = keypadMap.get(num); } else { rightPos = keypadMap.get(num); } answer.append(usedHand); } return answer.toString(); }
알게된 점
절대값 : Math.abs(int)
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 실패율 자바 리스트 정렬, 객체 (0) 2025.04.05 [프로그래머스] 크레인 인형뽑기 게임 자바 Stack (0) 2025.04.05 [프로그래머스] 두 개 뽑아서 더하기 자바 오름차순 정렬 Set (0) 2025.04.04 [프로그래머스] 삼진법 뒤집기 자바 (0) 2025.04.04 [프로그래머스] 신규 아이디 추천 자바 정규식 활용 (0) 2025.04.04