https://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
class Solution {
int[][] keypad= {
{1,2,3},
{4,5,6},
{7,8,9},
{-1, 0, -1}
};
// 왼손, 오른손 초기 위치
int leftNum = -1;
int rightNum = -1;
public String solution(int[] numbers, String hand) {
StringBuilder answer = new StringBuilder();
for (int i = 0; i < numbers.length; i++) {
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) { // 1,4,7 은 왼손으로 누름
answer.append("L");
leftNum = numbers[i]; // 왼손 위치 기록
} else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) { // 3,6,9 는 오른손으로 누름
answer.append("R");
rightNum = numbers[i]; // 오른손 위치 기록
} else {
answer.append(findHand(numbers[i], hand)); // 2,5,8,0 누를 손 찾기
}
}
return answer.toString();
}
private String findHand(int targetNum, String hand) {
int leftDist = 0; // targetNum ~ 왼손 거리
int rightDist = 0; // targetNum ~ 오른손 거리
// 왼손, 오른손, 누를번호의 2차원 배열 상의 인덱스
int leftIndex1 = 0;
int leftIndex2 = 0;
int rightIndex1 = 0;
int rightIndex2 = 0;
int targetIndex1 = 0;
int targetIndex2 = 0;
// 왼손의 2차원 배열 인덱스 찾기
for (int i = 0; i < keypad.length; i++) {
for (int j = 0; j < keypad[0].length; j++) {
if(keypad[i][j] == leftNum) {
leftIndex1 = i;
leftIndex2 = j;
break;
}
}
}
// 오른손의 2차원 배열 인덱스 찾기
for (int i = 0; i < keypad.length; i++) {
for (int j = 0; j < keypad[0].length; j++) {
if(keypad[i][j] == rightNum) {
rightIndex1 = i;
rightIndex2 = j;
break;
}
}
}
// 누를번호의 2차원 배열 인덱스 찾기
for (int i = 0; i < keypad.length; i++) {
for (int j = 0; j < keypad[0].length; j++) {
if(keypad[i][j] == targetNum) {
targetIndex1 = i;
targetIndex2 = j;
break;
}
}
}
leftDist = Math.abs(leftIndex1 - targetIndex1) + Math.abs(leftIndex2 - targetIndex2); // targetNum ~ 왼손 거리
rightDist = Math.abs(rightIndex1 - targetIndex1) + Math.abs(rightIndex2 - targetIndex2); // targetNum ~ 오른손 거리
if(leftDist > rightDist) { // 오른손이 가까움
rightNum = targetNum;
return "R";
}
else if(leftDist < rightDist) { // 왼손이 가까움
leftNum = targetNum;
return "L";
}
else { // 거리가 같으면
if("right".equals(hand)) { // 오른손잡이
rightNum = targetNum;
return "R";
}
else { // 왼손잡이
leftNum = targetNum;
return "L";
}
}
}
}
'JAVA > 프로그래머스' 카테고리의 다른 글
33. LEVEL1 - 크레인 인형뽑기 게임 (0) | 2021.08.27 |
---|---|
32. LEVEL1 - 비밀지도 (0) | 2021.08.26 |
31. LEVEL1 - 직업군 추천하기 (0) | 2021.08.26 |
30. LEVEL 1 - 숫자 문자열과 영단어 (0) | 2021.08.25 |
29. LEVEL 2 - 거리두기 확인하기 - BFS (0) | 2021.08.25 |