문제
https://programmers.co.kr/learn/courses/30/lessons/67256
풀이
단순 구현 문제로 키패드 좌표를 2차 배열로 만들어 놓고 시작한다.
첫번째 열은 왼쪽, 마지막 열은 오른쪽 손을 사용하며
중간 열은 왼손, 오른손의 현재 위치와 누를 숫자의 위치 간 거리를 계산하여 거리가 짧은 손으로 키패드를 누른다.
거리가 같을 경우 왼손잡이/오른손 잡이를 체크하여 진행한다.
숫자를 누를 때마다 누른 손의 좌표를 갱신해줘야 한다.
소스코드
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int[][] loc = new int[][]{
{4, 2},
{1, 1}, {1, 2}, {1, 3},
{2, 1}, {2, 2}, {2, 3},
{3, 1}, {3, 2}, {3, 3},
{4, 1}, {4, 3}
};
int[] left = loc[10];
int[] right = loc[11];
StringBuilder sb = new StringBuilder();
for(int number : numbers){
if(number == 1 || number == 4 || number == 7){
sb.append("L");
left = loc[number];
continue;
}
if(number == 3 || number == 6 || number == 9){
sb.append("R");
right = loc[number];
continue;
}
int leftDist = getDistance(loc[number], left);
int rightDist = getDistance(loc[number], right);
if(leftDist < rightDist){
sb.append("L");
left = loc[number];
} else if(leftDist > rightDist) {
sb.append("R");
right = loc[number];
} else {
if("right".equals(hand)){
sb.append("R");
right = loc[number];
} else {
sb.append("L");
left = loc[number];
}
}
}
return sb.toString();
}
private int getDistance(int[] a, int[] b){
return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);
}
}
'💡Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 단체사진 찍기 (Java) (0) | 2021.11.18 |
---|---|
[프로그래머스] 디스크 컨트롤러 (Java) (0) | 2021.11.17 |
[프로그래머스] 구명보트 (Java) (0) | 2021.11.12 |
[프로그래머스] 숫자 게임 (Java) (0) | 2021.11.11 |
[프로그래머스] 땅따먹기 (Java) (0) | 2021.11.09 |