728x90
문제 설명
스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.
1레벨 문제가 맞나요?? 저는 왜 어렵게 느껴졌죠??
사실 어렵다기 보다는 생각을 코드로 옮기는게 아직 익숙하지가 않습니다 ㅠㅠ 연습을 더 많이 해야겠어요...
우선 저는 이 문제를 푸는데 2시간정도 걸렸는데요...
이게 실제 코테였으면 바로 탈락이었죠 ㅠㅠ
우선 제가 짠 코드 먼저 볼까요??
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int LHand = 10;
int RHand = 12;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) {
answer += "L";
LHand = numbers[i];
} else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {
answer += "R";
RHand = numbers[i];
} else if (numbers[i] == 2 || numbers[i] == 5 || numbers[i] == 8 || numbers[i] == 0) {
if ((NumArray(numbers[i], LHand)) < (NumArray(numbers[i], RHand))) {
answer += "L";
LHand = numbers[i];
} else if ((NumArray(numbers[i], LHand)) > (NumArray(numbers[i], RHand))) {
answer += "R";
RHand = numbers[i];
} else if ((NumArray(numbers[i], LHand)) == (NumArray(numbers[i], RHand))) {
answer += hand.split("")[0].toUpperCase();
if (hand.equals("right")) {
RHand = numbers[i];
} else {
LHand = numbers[i];
}
}
}
}
return answer;
}
public int NumArray(int number, int handNum) {
int[][] numArray = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 0, 12 } };
int [] numberArr = new int [2];
int [] handNumArr = new int[2];
int res = 0;
// 1 = [0][0]
// 2 = [0][1]
// 3 = [0][2]
// 4 = [1][0]
// 5 = [1][1]
// 6 = [1][2]
// 7 = [2][0]
// 8 = [2][1]
// 9 = [2][2]
// * = [3][0]
// 0 = [3][1]
// # = [3][2]
for (int i = 0; i < numArray.length; i++) {
for (int j = 0; j < numArray[i].length; j++) {
if (number == numArray[i][j]) {
numberArr[0] = i;
numberArr[1] = j;
}
if (handNum == numArray[i][j]) {
handNumArr[0] = i;
handNumArr[1] = j;
}
}
}
if(numberArr[0] > handNumArr[0]) {
res += (numberArr[0] - handNumArr[0]);
} else {
res += (handNumArr[0] - numberArr[0]);
}
if(numberArr[1] > handNumArr[1]) {
res += (numberArr[1] - handNumArr[1]);
}else {
res += (handNumArr[1] - numberArr[1]);
}
return res;
}
}
처음에 switch문을 사용할까 하다가 그냥 if문을 사용하였습니다.
1, 4, 7이나 3, 6, 9를 입력하는건 쉬워요!
1, 4, 7일때는 왼손으로 클릭하고 왼손을 해당숫자에 가져다 놓고 3, 6, 9일때는 오른손으로 클릭하고 오른손을 해당 숫자에 가져다 놓으면되는데요
문제는 2, 5, 8, 0입니다.
왼손과 오른손의 거리가 같아면 오른손잡이일경우 오른손으로 왼손잡이일 경우에는 왼손으로 클릭하면되는데 이거 거리구하는게 생각보다 힘들었습니다...
하다보니까 코드가 너무 더러워져서 거리 구하는 코드는 따로 메서드를 만들었어요!!
(그래도 코드가 더럽죠? ㅠㅠ)
좀 더 간결하고 이해하기 쉬운코드로 나중에 리팩토링을 해볼기회가 있다면 꼭 한번 해보겠습니다!
혹시 제 코드에 대해 질문이 있다면 댓글 남겨주세요~
728x90
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers_Java] 체육복 (0) | 2021.07.25 |
---|---|
[Programmers_Java] 숫자 문자열과 영단어 - 2021 카카오 채용 연계형 인턴십 (0) | 2021.07.22 |
[Programmers_Java] 로또의 최고 순위와 최저 순위 (0) | 2021.07.21 |
[Programmers_Java] 폰켓몬 (0) | 2021.07.20 |
[Programmers_Java] 완주하지 못한 선수 (0) | 2021.06.08 |