반응형
문제분석
문제를 요약하자면, 1 4 7 키패드는 왼손이, 3 6 9 키패드는 오른손이,
중앙 키패드는 맨허튼거리를 이용해 짧은쪽이 클릭하고, 맨허튼 거리마저 같다면 hand의 따라서 클릭한다.
문제풀이
왼손 = 10 오른손=12 로 지정.
num이 1 4 7 이면 L을 삽입, num이 3 6 9라면 R을 삽입
num이 2 5 8 0 이라면 L과 R의 맨허튼거리를(getDist) 구하고, 거리에 따라 입력
거리마저도 같다면, hand의 따라서 입력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
class Solution {
public String solution(int [] n, String hand) {
StringBuilder bd = new StringBuilder();
int leftLocation = 10;
int rightLocation = 12;
for(int number : n) {
if(number ==1 || number == 4 || number == 7) {
bd.append("L");
leftLocation = number;
}else if(number == 3 || number == 6 || number == 9) {
bd.append("R");
rightLocation = number;
}else { // 2 5 8 0
int distanceL = getDist(leftLocation, number);
int distanceR = getDist(rightLocation, number);
if(distanceL > distanceR) {
bd.append("R");
rightLocation = number;
}else if(distanceL < distanceR) {
bd.append("L");
leftLocation = number;
}else {
if(hand.equals("right")) {
bd.append("R");
rightLocation = number;
}else {
bd.append("L");
leftLocation = number;
}
}
}
}
return bd.toString();
}
public static int getDist(int location, int number) {
if(number == 0) {
number = 11;
}
if(location == 0) {
location = 11;
}
int locationX = (location-1) / 3;
int locationY = (location-1) % 3;
int numberX = (number-1) / 3;
int numberY = (number-1) % 3;
return Math.abs(locationX-numberX) + Math.abs(locationY - numberY);
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level1' 카테고리의 다른 글
[프로그래머스,자바] Level1: 예산 (0) | 2021.08.12 |
---|---|
[프로그래머스,자바]Level 1 :약수의 개수와 덧셈 (0) | 2021.08.12 |
[프로그래머스,자바] Level1 : 3진법 뒤집기 (0) | 2021.08.10 |
[프로그래머스,Java] Level1: 위클리챌린지 2주차 (0) | 2021.08.09 |
[프로그래머스,Java] Level1: 숫자 문자열과 영단어 (0) | 2021.08.07 |