다희의 코딩 성장일기
[프로그래머스] level1. 키패드 누르기 (자바 JAVA) 본문
[ 문제 ] [프로그래머스] level1. 키패드 누르기 (자바 JAVA)
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/67256
# 접근 방법 및 풀이
- 키패드를 배열로 생각하고 구현했다.
- Point Left, Point Rigth 변수를 두어 현재 위치로 초기화 해주었다.
-
0 1 2 0 1 2 3 1 4 5 6 2 7 8 9 3 * 0 # - HashMap <Integer, Point>를 사용해 해당 번호에 Point.x Point.y 행 열 위치를 넣었다.
- StringBuilder에 1,4,7일땐 'L'을 3,6,9일떈 'R'을 2,5,8,0일때는 각 left와 right위치에서 가까운 쪽을, 값이 같으면 hand에 따라 더했다.
- 자세한건 코드참조
# 주의할 점
- 딱히 없음
JAVA 코드
import java.awt.Point;
import java.util.HashMap;
class Solution {
public String solution(int[] numbers, String hand) {
Point left = new Point(3,0);
Point right = new Point(3,2);
int num = 1;
HashMap<Integer, Point> map = new HashMap<>();
for(int i = 0 ; i < 3; i++){
for(int j = 0 ; j < 3; j++){
map.put(num, new Point(i, j));
num++;
}
}
map.put(0, new Point(3,1));
StringBuilder sb = new StringBuilder();
for(int i = 0; i < numbers.length; i ++){
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7){
sb.append("L");
left.x = map.get(numbers[i]).x;
left.y = map.get(numbers[i]).y;
continue;
}
if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9){
sb.append("R");
right.x = map.get(numbers[i]).x;
right.y = map.get(numbers[i]).y;
continue;
}
int a = Math.abs(left.x - map.get(numbers[i]).x) + Math.abs(left.y - map.get(numbers[i]).y);
int b = Math.abs(right.x - map.get(numbers[i]).x) + Math.abs(right.y - map.get(numbers[i]).y);
if(a < b ||(a==b && hand.equals("left"))){
sb.append("L");
left.x = map.get(numbers[i]).x;
left.y = map.get(numbers[i]).y;
}else{
sb.append("R");
right.x = map.get(numbers[i]).x;
right.y = map.get(numbers[i]).y;
}
}
return sb.toString();
}
}
REVIEW
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] level1. 폰켓몬 (자바 JAVA) (0) | 2021.08.23 |
---|---|
[프로그래머스] level1. 위클리 챌린지 2주차 (자바 JAVA) (0) | 2021.08.23 |
[프로그래머스] level1. 위클리챌린지 4주차 (자바 JAVA) (0) | 2021.08.23 |
[프로그래머스] level1. 3진법 뒤집기 (자바 JAVA) (0) | 2021.08.22 |
[프로그래머스] level1. [1차] 비밀지도 (자바 JAVA) (0) | 2021.08.22 |
Comments