일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- regression
- SECS-II
- MYSQL
- Computer Science
- Baekjoon
- C++
- python
- 백준
- c
- 스포티파이
- programmers
- Spotify Api
- 자바
- linux
- 회귀
- CS
- 회원가입
- SWEA
- Gem
- 프로그래머스
- SECS/GEM
- Spring
- SECS
- 파이썬
- SW Expert Academy
- modern c++
- spring boot
- java
- spotify
- Spring JPA
Archives
- Today
- Total
비버놀로지
[Programmers 프로그래머스] 67256 키패드 누르기 본문
728x90
programmers.co.kr/learn/courses/30/lessons/67256
Point를 이용해서 각각의 숫자의 위치값을 저장해서 문제를 풀었다. 0번의 위치가 (3,1), 1번의 위치가 (0,0)이런식으로 넣어준후, 각각의 키패드를 누르게 됬을때 불러와 사용한다.
중간에 있는 키패드를 누를때에는 가까이 있는 손으로 눌러야 하는데, 그 가까운 손을 찾는 방법은 키패드의 좌표값과
손의 위치 좌표값의 차이를 비교를 해서 가까운 손을 찾도록 했다.
그런데 거리가 가깝다면 입력에서 왼손잡이인지 오른손잡이인지 확인을 하고 해당하는 손으로 누를수 있도록 했다.
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
Point arr[]= {new Point(3,1),new Point(0,0),new Point(0,1),new Point(0,2),new Point(1,0),new Point(1,1),new Point(1,2),new Point(2,0),new Point(2,1),new Point(2,2)};
Point left = new Point(3, 0);
Point right = new Point(3, 2);
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) { //왼손으로 누르기
answer = answer.concat("L");
if (numbers[i] == 1) {
left.x = 0;
left.y = 0;
} else if (numbers[i] == 4) {
left.x = 1;
left.y = 0;
} else if (numbers[i] == 7) {
left.x = 2;
left.y = 0;
}
} else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) { //오른손으로 누르기
answer = answer.concat("R");
if (numbers[i] == 3) {
right.x = 0;
right.y = 2;
} else if (numbers[i] == 6) {
right.x = 1;
right.y = 2;
} else if (numbers[i] == 9) {
right.x = 2;
right.y = 2;
}
}
else { //가까운 손을 찾아 누르기
int l=Math.abs(left.x-arr[numbers[i]].x)+Math.abs(left.y-arr[numbers[i]].y);
int r=Math.abs(right.x-arr[numbers[i]].x)+Math.abs(right.y-arr[numbers[i]].y);
if(l==r) {
if(hand.equals("right")) {
answer=answer.concat("R");
right.x = arr[numbers[i]].x;
right.y = arr[numbers[i]].y;
}else {
answer=answer.concat("L");
left.x = arr[numbers[i]].x;
left.y = arr[numbers[i]].y;
}
}else if(l<r) {
answer=answer.concat("L");
left.x = arr[numbers[i]].x;
left.y = arr[numbers[i]].y;
}else {
answer=answer.concat("R");
right.x = arr[numbers[i]].x;
right.y = arr[numbers[i]].y;
}
}
}
return answer;
}
}
class Point {
int x, y;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
728x90
'ALGORITM > JAVA' 카테고리의 다른 글
[Programmers 프로그래머스] 12943 콜라츠 추측 (0) | 2021.01.08 |
---|---|
[Programmers 프로그래머스] 12940 최대공약수와 최소공배수 (0) | 2021.01.08 |
[Programmers 프로그래머스] 12937 짝수와 홀수 (0) | 2021.01.08 |
[Programmers 프로그래머스] 12935 제일 작은 수 제거하기 (0) | 2021.01.08 |
[Programmers 프로그래머스] 12933 정수 제곱근 판별 (0) | 2021.01.08 |
Comments