[프로그래머스][Level1][Java] 키패드 누르기

2022. 3. 4. 16:44·프로그래머스/Level 1

문제가 너무 길어서 그냥 링크로 문제를 넣겠다.

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

문제는 이것이고 내 풀이 코드는

public String solution(int[] numbers, String hand) {    //키패드 누르기
    String answer = "";
    int left = 10;                      //*버튼을 10, #버튼을 12로 가정
    int right = 12;
    for(int x : numbers){
        if(x == 1||x == 4||x == 7){     //1,4,7을 누를 경우 왼손으로 누르고 왼손위치를 그 키패드위치로 바꿔준다.
            answer += "L";
            left = x;
        }else if(x == 3||x == 6||x == 9){//3,6,9를 누를 경우 오른손으로 누르고 오른손위치를 그 키패드위치로 바꿔준다.
            answer += "R";
            right = x;
        }else{                          //2,5,8,0을 누를 경우
            int ld = length(x,left);    //왼손과 누를 키패드까지의 거리
            int rd = length(x,right);   //오른손과 누를 키패드까지의 거리
            if(ld>rd){                  //왼손이 더 거리가 멀 경우
                answer += "R";          //오른손으로 키패드를 누른다.
                right = x;
            }else if(ld < rd){          //오른손이 더 거리가 멀 경우
                answer += "L";          //왼손으로 키패드를 누른다.
                left = x;
            }else{                      //왼손과 오른손의 거리가 같을 경우
                if(hand.equals("left")){//왼손잡이면 왼손으로, 아니면 오른손으로 누른다.
                    answer += "L";
                    left = x;
                }else{
                    answer += "R";
                    right = x;
                }
            }
        }
    }
    return answer;
}
public int length(int x, int fing){     //왼손이나 오른손과 누를 키패드의 거리를 계산하는 메서드
    x = (x == 0) ? 11 : x;              //0은 숫자 11이라고 생각하고 계산
    fing = (fing == 0) ? 11 : fing;
    return Math.abs(fing-x)%3 + Math.abs(fing-x)/3; //숫자들의 차이/3값과 %3값을 해서 return
}

이것이다.

솔직히 이 문제는 1,4,7,3,6,9를 누르는 경우는 쉬운데 2,5,8,0을 누르는 경우가 어려운 경우다.

그래서 2,5,8,0을 누를 때, 왼손과 오른손에서 각각 거리를 재는 메서드 length를 만들었는데

처음에 거리를 재려고 할 때, 솔직히 막막했다.

 

예를들어, 8에서 4(왼손)까지 거리와 6(오른손)까지 거리는 같은데 이 숫자들의 차는 각각 4,2로 왼손의 차이가 더 컸고

2에서 4(왼손)까지 거리와 6(오른손)까지 거리는 같은데 이 숫자들의 차는 각각 2,4로 오른손의 차이가 더 컸다.

이렇게 단순히 숫자의 차로 거리를 정하려니까 좀 중구난방이어서 고민했었는데

 

바로 옆 키패드까지의 거리를 1로 잡고 2와5사이의 거리, 5와6사이의거리를 1로 나오게 하려고 각각 숫자들의 차이를 봤다. 그러니까 3,1로 나왔는데 이 3과 1이 어떻게 동시에 1로 나올까...하고 곰곰히 생각해봤다.

그러고 숫자 키패드들을 보니 *,0,#을 각각 10,11,12로 두고 계산하면 윗줄과 밑줄의 차이가 3이 났다.

1 2 3

4 5 6

7 8 9

* 0 #

 

그래서 여기서 힌트를 얻어서 3을 나누거나 3으로 나눈 나머지를 조합해서 이리저리 해보니까

두 수의 차이/3 + 두 수의 차이%3 = 두 수의 거리가 된 것을 발견하고 그것을 메서드에 적어서 풀었다.

이런 문제는 처음 풀어봐서 좀 처음에 막막했는데 생각보다 쉬웠다!!!

다음에 이런 비슷한 유형이 나오면 이것을 응용해서 잘 풀수 있을 것 같다 ㅎㅎ

 

저작자표시 비영리 (새창열림)

'프로그래머스 > Level 1' 카테고리의 다른 글

[프로그래머스][Level1][Java] 푸드 파이트 대회  (0) 2022.11.04
[프로그래머스][Level1][Java] 신고 결과 받기  (0) 2022.03.05
[프로그래머스][Level1][Java] 체육복  (0) 2022.03.04
[프로그래머스][Level1][Java] 실패율  (0) 2022.03.03
[프로그래머스][Level1][Java] 다트 게임  (0) 2022.03.01
'프로그래머스/Level 1' 카테고리의 다른 글
  • [프로그래머스][Level1][Java] 푸드 파이트 대회
  • [프로그래머스][Level1][Java] 신고 결과 받기
  • [프로그래머스][Level1][Java] 체육복
  • [프로그래머스][Level1][Java] 실패율
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    [프로그래머스][Level1][Java] 키패드 누르기
    상단으로

    티스토리툴바