-
[프로그래머스 Lv.1] 키패드 누르기 javaDEV/알고리즘 2020. 11. 19. 13:42
문제설명
programmers.co.kr/learn/courses/30/lessons/67256
제한사항
- 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566class 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) {/** = 100 = 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으로 나누어주어 해결! :)
'DEV > 알고리즘' 카테고리의 다른 글
[프로그래머스 Lv.1] 비밀지도 java (0) 2020.11.27 [프로그래머스 Lv.1] 예산 java (0) 2020.11.24 [프로그래머스 Lv.1] 크레인 인형뽑기 java (0) 2020.11.10 [프로그래머스 Lv.2] 카펫 java (0) 2020.11.03 [프로그래머스 Lv.1] 3진법 뒤집기 java (0) 2020.10.20