다희의 코딩 성장일기

[프로그래머스] level1. 키패드 누르기 (자바 JAVA) 본문

Algorithm/프로그래머스

[프로그래머스] level1. 키패드 누르기 (자바 JAVA)

ilmiodiario 2021. 8. 23. 17:15

[ 문제 ]  [프로그래머스] level1. 키패드 누르기 (자바 JAVA)

 

문제 링크 : https://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


# 접근 방법 및 풀이 

 

  • 키패드를 배열로 생각하고 구현했다.
  • 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

Comments