원본 : 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 {
public String solution(int[] numbers, String hand) {
Coordinate leftHand = new Coordinate(0, 0);
Coordinate rightHand = new Coordinate(2, 0);
Coordinate[] coordinateArr = new Coordinate[10];
coordinateArr[0] = new Coordinate(1, 0);
coordinateArr[1] = new Coordinate(0, 3);
coordinateArr[2] = new Coordinate(1, 3);
coordinateArr[3] = new Coordinate(2, 3);
coordinateArr[4] = new Coordinate(0, 2);
coordinateArr[5] = new Coordinate(1, 2);
coordinateArr[6] = new Coordinate(2, 2);
coordinateArr[7] = new Coordinate(0, 1);
coordinateArr[8] = new Coordinate(1, 1);
coordinateArr[9] = new Coordinate(2, 1);
StringBuilder stringBuilder = new StringBuilder();
for (int number : numbers) {
if (number == 1 || number == 4 || number == 7) {
fn(leftHand, coordinateArr[number], stringBuilder, "L");
} else if (number == 3 || number == 6 || number == 9) {
fn(rightHand, coordinateArr[number], stringBuilder, "R");
} else {
Coordinate currentCoordinate = coordinateArr[number];
int leftDiff = Math.abs(currentCoordinate.x - leftHand.x) + Math.abs(currentCoordinate.y - leftHand.y);
int rightDiff = Math.abs(currentCoordinate.x - rightHand.x) + Math.abs(currentCoordinate.y - rightHand.y);
if (leftDiff < rightDiff) {
fn(leftHand, currentCoordinate, stringBuilder, "L");
} else if (leftDiff > rightDiff) {
fn(rightHand, currentCoordinate, stringBuilder, "R");
} else {
if (hand.equals("left")) {
fn(leftHand, currentCoordinate, stringBuilder, "L");
} else {
fn(rightHand, currentCoordinate, stringBuilder, "R");
}
}
}
}
return stringBuilder.toString();
}
private void fn(Coordinate Hand, Coordinate currentCoordinate, StringBuilder stringBuilder, String hand) {
Hand.x = currentCoordinate.x;
Hand.y = currentCoordinate.y;
stringBuilder.append(hand);
}
}
class Coordinate {
int x;
int y;
public Coordinate(int x, int y) {
this.x = x;
this.y = y;
}
}
없는 숫자 더하기 (월간 코드 챌린지 시즌3) (0) | 2022.06.24 |
---|---|
크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십) (0) | 2022.06.24 |
숫자 문자열과 영단어 (2021 카카오 채용연계형 인턴십) (0) | 2022.06.24 |
신규 아이디 추천 (2021 KAKAO BLIND RECRUITMENT) (0) | 2022.06.23 |
로또의 최고 순위와 최저 순위 (2021 Dev-Matching: 웹 백엔드 개발자(상반기)) (0) | 2022.06.23 |
댓글 영역