반응형
https://programmers.co.kr/learn/courses/30/lessons/67256
생각나는대로 바로 짜서 9분밖에 안걸렸지만 문제를 너무 어렵게 접근해서 효율 똥망이다.
차라리 HashMap으로 key는 numbers Value, Value는 numbers Index로 만들어서 풀면 엄청 쉬울텐데 말이다.
언제까지 주먹구구식으로 풀래????????? 효율성도 좀 생각좀하자
package question;
public class 키패드누르기
{
public static void main(String [] args)
{
int[] numbers1 = {1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5};
System.out.println(solution(numbers1, "right"));
int[] numbers2 = {7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2};
System.out.println(solution(numbers2, "left"));
int[] numbers3 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
System.out.println(solution(numbers3, "right"));
}
public static String solution(int[] numbers, String hand)
{
String answer = "";
int [][] phoneNumbers = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{-1, 0, -1}
};
// 0,0 0,1 0,2
// 1,0 1,1 1,2
// 2,0 2,1 2,2
// 3,0 3,1 3,2
//
int [] leftPosition = {3, 0};
int [] rightPosition = {3, 2};
int [] leftFix = {1, 4, 7};
int [] rightFix = {3, 6, 9};
Loop1: for (int i = 0; i <numbers.length; i++) {
int leftPos = 0;
int rightPos = 0;
for (int a = 0; a < phoneNumbers.length; a++) {
for (int b = 0; b < phoneNumbers[0].length; b++) {
if (phoneNumbers[a][b] == numbers[i]) {
leftPos = a;
rightPos = b;
break;
}
}
}
for (int a = 0; a < leftFix.length; a++) {
if (numbers[i] == leftFix[a]) {
leftPosition[0] = leftPos;
leftPosition[1] = rightPos;
answer += "L";
continue Loop1;
}
}
for (int a = 0; a < rightFix.length; a++) {
if (numbers[i] == rightFix[a]) {
rightPosition[0] = leftPos;
rightPosition[1] = rightPos;
answer += "R";
continue Loop1;
}
}
int leftFingerDistance = Math.abs(leftPos-leftPosition[0]) + Math.abs(rightPos-leftPosition[1]);
int rightFingerDistance = Math.abs(leftPos-rightPosition[0]) + Math.abs(rightPos-rightPosition[1]);
if (leftFingerDistance - rightFingerDistance == 0)
{
if (hand.equals("right"))
{
rightPosition[0] = leftPos;
rightPosition[1] = rightPos;
answer += "R";
} else {
leftPosition[0] = leftPos;
leftPosition[1] = rightPos;
answer += "L";
}
} else if(leftFingerDistance > rightFingerDistance)
{
rightPosition[0] = leftPos;
rightPosition[1] = rightPos;
answer += "R";
}else {
leftPosition[0] = leftPos;
leftPosition[1] = rightPos;
answer += "L";
}
}
return answer;
}
}
반응형
'CS > Algorithm' 카테고리의 다른 글
로또의 최고 순위와 최저 순위 (0) | 2021.05.04 |
---|---|
모의고사 (0) | 2021.05.04 |
신규 아이디 추천 (0) | 2021.05.03 |
k 번째 수 (0) | 2021.05.03 |
완주하지 못한 선수 (0) | 2021.04.30 |