DEV/알고리즘
[프로그래머스 Lv.1] 키패드 누르기 java
Imvory
2020. 11. 19. 13:42
문제설명
programmers.co.kr/learn/courses/30/lessons/67256
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
제한사항
- numbers 배열의 크기는 1 이상 1,000 이하입니다.
- numbers 배열 원소의 값은 0 이상 9 이하인 정수입니다.
- hand는 "left" 또는 "right" 입니다.
- "left"는 왼손잡이, "right"는 오른손잡이를 의미합니다.
- 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.
입출력 예
numbers | hand | result |
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] | "right" | "LRLLLRLLRRL" |
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] | "left" | "LRLLRRLLLRR" |
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0] | "right" | "LLRLLRLLRL" |
Solution
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
60
61
62
63
64
65
66
|
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
int left = 10; //*
int right = 12; //#
for(int n : numbers) {
if(n == 1 || n == 4 || n == 7) {
answer += "L";
left = n;
}else if (n == 3 || n == 6 || n == 9) {
answer += "R";
right = n;
}else if (n == 2 || n == 5 || n == 8 || n == 0) {
if (distance(left,n)<distance(right,n)) {
answer += "L";
left = n;
}else if (distance(left,n)>distance(right,n)) {
answer += "R";
right = n;
}else {
if(hand.equals("left")) {
answer += "L";
left = n;
}else if(hand.equals("right")) {
answer += "R";
right = n;
}
}
}
}
return answer;
}
public static int distance(int handLocation, int n) {
/*
* = 10
0 = 11
# = 12
*/
if(handLocation==0) {
handLocation = 11;
}
if(n==0) {
n = 11;
}
int distance = 0;
int num = Math.abs(n - handLocation);
if(num%3==0) {
distance = num/3;
}else {
distance = (num+1)/3 + 1;
}
return distance;
}
}
|
cs |
처음엔 키패드 2,5,8,0을 누를때 if 조건에 Math.abs(location-n)을 비교하기만 하면 된다고 생각했는데
그럼 오른손이 2에 있을때 5를 누르는 거리가 한칸으로 계산이 안된다 ㅠ
그래서 distance 메소드를 따로 만들어서 Math.abs(location-n)을 3으로 나누어주어 해결! :)