(Java) 프로그래머스 키패드 누르기

2021. 12. 3. 04:16·코딩 테스트

이 문제를 마지막으로 프로그래머스 1단계 문제를 다 풀었다.

2단계는 1/3 정도 남았으니 2단계도 다 풀 수 있도록 계속해야겠다.

1단계 중에서 가장 어려웠던 문제로 느꼈다...

 

2580 처리를 어떻게 해야 할지 고민을 많이 했다.

키패드 모든 숫자를 xy좌표로 쓸 수 있게 keypad 변수를 만들었고

x와 y의 거리를 계산해서 리턴할 수 있게 했다.

 

문제 자체는 그렇게 어렵다고 느끼진 않았는데 생각을 코드로 구현하는 게 힘들었다.


최종 코드

class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";
        // * 0 # 바꾸기
        int left = 10;
        int mid = 11;
        int right = 12;

        for (int i = 0; i < numbers.length; i++) {
            // 1 4 7 이면
            if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) {
                answer += "L";
                left = numbers[i];
            }
            // 3 6 9 이면
            else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {
                answer += "R";
                right = numbers[i];
            }
            // 2 5 8 0 이면
            else {
            //numbers[i] 가 0이면 mid로 바꾸기
                if(numbers[i] == 0) {
                    numbers[i] = mid;
                }
                int lp = xy(numbers[i], left);
                int rp = xy(numbers[i], right);

                // 왼쪽손보다 오른쪽손이 더 가까운 경우
                if(lp > rp) {
                    answer += "R";
                    right = numbers[i];
                }
                // 오른쪽손보다 왼쪽손이 더 가까운 경우
                else if(lp < rp) {
                    answer += "L";
                    left = numbers[i];
                }
                // 왼쪽손과 오른쪽손 거리가 같은 경우
                else {
                    if(hand.equals("left")) {
                        answer += "L";
                        left = numbers[i];

                    }
                    else {
                        answer += "R";
                        right = numbers[i];
                    }
                }
            }
        }
        return answer;
    }
        public static int xy(int n, int p) {
        // 키패드를 좌표로 변수 설정
        int[][] keypad = {{0,0},{0,1},{0,2},{1,0},{1,1},{1,2},{2,0},{2,1},{2,2},{3,0},{3,1},{3,2}};
        // x 좌표 거리 계산
        int xx = Math.abs(keypad[p - 1][0] - keypad[n - 1][0]);
        // y 좌표 거리 계산
        int yy = Math.abs(keypad[p - 1][1] - keypad[n - 1][1]);
        return xx + yy;
    }
}

'코딩 테스트' 카테고리의 다른 글

(Java) 프로그래머스 최댓값과 최솟값 (Lv 2)  (0) 2021.12.15
(Java) 프로그래머스 최솟값 만들기  (0) 2021.12.04
(Java) 프로그래머스 크레인 인형뽑기 게임  (0) 2021.12.01
(Java) 프로그래머스 숫자 문자열과 영단어  (0) 2021.11.27
(Java) 프로그래머스 폰켓몬  (0) 2021.11.24
'코딩 테스트' 카테고리의 다른 글
  • (Java) 프로그래머스 최댓값과 최솟값 (Lv 2)
  • (Java) 프로그래머스 최솟값 만들기
  • (Java) 프로그래머스 크레인 인형뽑기 게임
  • (Java) 프로그래머스 숫자 문자열과 영단어
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 프로그래머스 키패드 누르기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.