[프로그래머스 연습문제][Python] Lv.1 키패드 누르기

2022. 1. 13. 10:26·Python/알고리즘 문제풀이

[카카오 인턴] 키패드 누르기

문제 풀러 바로가기 👇👇👇👇👇👇

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

 

 

풀이 코드

def solution(numbers, hand):
    answer = ''
    left = (3, 0)
    right = (3, 2)
    key = [ (3, 1), (0,0), (0, 1), (0,2), (1,0), (1, 1), (1,2), (2,0), (2, 1), (2,2) ]

    for number in numbers:
        if number in [1, 4, 7]:
            answer += "L"
            left = key[number]
        elif number in [3, 6, 9]:
            answer += "R"
            right = key[number]
        else:
            distance_l = abs(key[number][0] - left[0]) + abs(key[number][1] - left[1])
            distance_r = abs(key[number][0] - right[0]) + abs(key[number][1] - right[1])
            if distance_r < distance_l:
                answer += "R"
                right = key[number]
            elif distance_r > distance_l:
                answer += "L"
                left = key[number]
            else:
                if hand == "right":
                    answer += "R"
                    right = key[number]
                else:
                    answer += "L"
                    left = key[number]

    return answer

문제 풀이

튜플을 이용해 문제를 구현해봤다. (행, 열) 형식

문제를 읽어보면 "*"과 "#" 입력은 없고 숫자만 입력되기 때문에

key에 인덱스(0~9) 숫자에 맞게 키패드의 위치정보를 넣어놨다.

왼쪽은 (3, 0) = *의 위치정보 / 오른쪽은  (3, 2) = #의 위치정보로 초기화했다.

 

조건에 따라 answer에 L과 R을 삽입했는데 1,4,7일 때는 L을 삽입해주고, 3,6,9 일 때는 R을 삽입해준다.

만약 두 경우가 아니라면 오른쪽과 왼쪽과 숫자 사이의 거리를 구해줘야한다.

 

대각선 이동은 없기 때문에 단순히 행은 행대로, 열은 열대로 거리계산을 해주면 된다.

(절대값 함수 abs()를 씌어주는 것이 포인트)

 

마지막으로 거리가 같다면 hand에 따라 조건문을 만들어 선택하도록 하면 된다.

'Python/알고리즘 문제풀이' 카테고리의 다른 글
  • [백준][파이썬] DFS와 BFS
  • [프로그래머스 연습문제] 약수의 개수와 덧셈
  • [프로그래머스 연습문제][Python] Lv.1 신고 결과 받기
  • [프로그래머스 연습문제][Python] Lv.1 크레인 인형뽑기 게임
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    GitHub
    os
    스프링
    부스트캠프 7기
    MySQL
    운영체제
    java
    부스트캠프
    오류해결
    Git
    Spring
    Python
    웹개발
    자바
    자바스크립트
    jsp
    스프링부트
    부스트캠프 멤버십
    파이썬
    알고리즘
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[프로그래머스 연습문제][Python] Lv.1 키패드 누르기
상단으로

티스토리툴바