728x90
▶ 문제
▶ 풀이방법
- 첫번째 풀이방법
--> (현재값 - 눌러야 하는 값)을 3으로 나눈 몫과 나머지를 더하면 이동해야하는 키패드 칸의 거리가 나옴.
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int left = 10; //*은 10으로
int right = 12; //#은 12로
for(int i = 0; i < numbers.length; i++){
if(numbers[i] == 0) numbers[i] = 11; // 0은 10으로 인식
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) {
answer += "L";
left = numbers[i];
}
else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {
answer += "R";
right = numbers[i];
}
else{
int lnum = Math.abs(left-numbers[i]);//Math.abs()는 절대값 함수
int rnum = Math.abs(right-numbers[i]);
int l = lnum%3 + lnum/3; //왼손이 이동해야하는 거리
int r = rnum%3 + rnum/3; //오른손이 이동해야하는 거리
//왼손 오른손 이동해야하는 거리 값 비교
if(l == r){
if(hand.equals("right")){
answer += "R";
right = numbers[i];
}else{
answer += "L";
left = numbers[i];
}
}else if(l > r){
answer += "R";
right = numbers[i];
}else{
answer += "L";
left = numbers[i];
}
}
}
return answer;
}
}
위의 코드는 (현재값-눌러야 하는값)을 3으로 나눠 몫과 나머지를 더한다는것을 다른사람 풀이글에서 알게되어서 풀어서 작성한 코드.
(머리를 조금만 더 굴려보자..!!ㅜㅜ)
- 두번째 풀이방법
- 키패드를 배열이라 생각하고 푸는 방법
- 첫번째 풀이방법보다 속도↑
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int[] left = {3,0}; //* 배열 위치
int[] right = {3,2}; //# 배열 위치
//0~9까지의 위치 배열로 저장
int[][] key ={{3,1},{0,0},{0,1},{0,2},{1,0},{1,1},{1,2},{2,0},{2,1},{2,2}};
for(int i = 0; i < numbers.length; i++){
int num = numbers[i];
if(num == 1 || num == 4 || num == 7){
left[0] = key[num][0];
left[1] = key[num][1];
answer += "L";
}else if(num == 3 || num == 6 || num == 9){
right[0] = key[num][0];
right[1] = key[num][1];
answer += "R";
}else{
int l = Math.abs(left[0] - key[num][0]) + Math.abs(left[1] - key[num][1]);
int r = Math.abs(right[0] - key[num][0]) + Math.abs(right[1] - key[num][1]);
if(l == r){
if(hand.equals("left")){
left[0] = key[num][0];
left[1] = key[num][1];
answer += "L";
}else{
right[0] = key[num][0];
right[1] = key[num][1];
answer += "R";
}
}else if(l > r){
right[0] = key[num][0];
right[1] = key[num][1];
answer += "R";
}else{
left[0] = key[num][0];
left[1] = key[num][1];
answer += "L";
}
}
}
return answer;
}
}
728x90
'Algorithm > PROGRAMMERS[Java]' 카테고리의 다른 글
Lv1. 신규아이디 추천[카카오] (0) | 2022.05.01 |
---|---|
Lv1. 숫자 문자열과 영단어[카카오] (0) | 2022.05.01 |
Lv1. 크레인 인형뽑기 게임[카카오] (0) | 2022.04.30 |
Lv1. 음양 더하기 (0) | 2022.04.25 |
Lv1. 없는 숫자 더하기 (0) | 2022.04.24 |