Algorithm & SQL/Programmers
[Programmers Lv.1 / Java] 키패드 누르기(2020 카카오 인턴십)
김룹
2024. 3. 25. 17:30
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
👇 내가 작성한 코드
import java.util.*;
class Solution {
int[][] key = {
{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[] leftLo = {3, 0}; // 현재 왼쪽 손가락의 위치
int[] rightLo = {3, 2}; // 현재 오른쪽 손가락의 위치
public String solution(int[] numbers, String hand) {
StringBuilder answer = new StringBuilder();
for(int n : numbers) {
switch(n) {
case 1: case 4: case 7:
answer.append("L"); // 왼손으로 누르기
leftLo = key[n]; // 왼쪽 손가락 위치 초기화
break;
case 3: case 6: case 9:
answer.append("R"); // 오른손으로 누르기
rightLo = key[n]; // 오른 손가락 위치 초기화
break;
default:
int leftDist = getDist(leftLo, key[n]); // 현재 왼손과 누를 숫자의 거리 구하기
int rightDist = getDist(rightLo, key[n]); // 상동
if(leftDist < rightDist || (leftDist == rightDist && hand.equals("left"))) {
answer.append("L");
leftLo = key[n];
} else {
answer.append("R");
rightLo = key[n];
}
break;
}
}
return answer.toString();
}
// 현재 위치와 누를 숫자의 거리 구하는 메소드
public int getDist(int[] key1, int[] key2) {
return Math.abs(key1[0] - key2[0]) + Math.abs(key1[1] - key2[1]);
}
}
느낀 점 및 정리 ✍️
1. 재밌게 풀었따