Level1) 키패드 누르기
2021. 4. 27. 10:33ㆍPS/programmers
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | /* 왼손 시작 *, 오른손 시작 #, number : 0~9 1, 4, 7 은 무조건 왼손 3, 6, 9 는 무조건 오른손 두 손가락에서의 키패드 거리가 같다면 hand 쪽으로 누른다. */ public class Level1_키패드누르기 { static int leftPosition = 10; static int rightPosition = 12; static final char LEFT = 'L'; static final char RIGHT = 'R'; static String hand = ""; public static String solution(int[] numbers, String s) { StringBuilder sb = new StringBuilder(); hand = s; for (int number : numbers) { sb.append(getAnswer(number)); } return sb.toString(); } private static char getAnswer(int number) { if (number == 1 || number == 4 || number == 7) { leftPosition = number; return LEFT; } if (number == 3 || number == 6 || number == 9) { rightPosition = number; return RIGHT; } // 2, 5, 8, 0 일때는 leftPosition, rightPosition 을 비교해야함 int leftDistance = getDistance(number, leftPosition); int rightDistance = getDistance(number, rightPosition); return getHand(leftDistance - rightDistance, number); } private static int getDistance(int number, int position) { position = position == 0 ? 11 : position; number = number == 0 ? 11 : number; int curX = (position - 1) / 3; int curY = (position - 1) % 3; int targetX = number / 3; int targetY = 1; return Math.abs(curX - targetX) + Math.abs(curY - targetY); } private static char getHand(int distance, int number) { if (distance < 0) { leftPosition = number; return LEFT; } else if (distance > 0) { rightPosition = number; return RIGHT; } // 어느손인지 비교 if (hand.equals("left")) { leftPosition = number; return LEFT; } else { rightPosition = number; return RIGHT; } } public static void main(String[] args) { int[] numbers = {7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2}; String hand = "left"; System.out.println(solution(numbers, hand)); } } | cs |
'PS > programmers' 카테고리의 다른 글
Level1) 신규아이디추천 (0) | 2021.04.29 |
---|---|
Level1) 3진법 뒤집기 (0) | 2021.04.28 |
Level1) 다트게임 (0) | 2021.04.27 |
Level1) 비밀지도 (0) | 2021.03.17 |
Level1) 실패율 (0) | 2021.03.16 |