[프로그래머스] 2020 카카오 인턴십 - 키패드 누르기

2023. 2. 12. 15:14·Coding Test/Programmers_Python
728x90

키패드를 누르는 카카오 인턴십 문제이다. 방법을 알면 쉽게 해결이 가능하지만 제한사항을 놓칠 경우 해결하기 힘들다는 특징이 있다


문제

1. 키패드에서 왼손과 오른손 엄지손가락만을 이용해서 숫자만 입력하려고 한다

2. 왼엄지와 오른엄지는 각각 '*', '#'에 초기 위치를 잡는다

3. [1, 4, 7]은 왼손 엄지로만 누르고, [3, 6, 9]는 오른 엄지로만 누른다

4. [2, 5, 8, 0]은 둘 다 누를 수 있고, 보통은 더 가까운 쪽의 엄지를 이용해서 누른다

5. 숫자와 두 손가락 간의 거리가 같을 경우에는 hand에 적힌 주 사용 손으로 누른다 (왼손잡이, 오른손잡이)

6. 누른 손을 L 또는 R을 이용해서 나타내고 연속적인 문자열로 return하는 문제이다


무엇을 확인해야할까?

1. 키패드 각각에 좌표를 설정, 각 손가락의 초기 위치 설정하기

2. 왼손 엄지 또는 오른 손 엄지로만 누를 수 있는 지 확인하기

3. 둘 다 누를 수 있는 경우 현재 위치와 목표 위치 사이의 거리 구하기

4. 더 가까운 쪽의 손으로 누르되, 거리가 같다면 왼손잡이인 지 오른손잡이인 지 확인하기

5. 각각의 숫자를 누른 손을 L, R을 이용해 문자열에 넣고 현재 손가락 위치 업데이트 하기


코드 작성하기

def solution(numbers, hand):
    answer = ''
    # 키패드를 좌표로 변경
    num_pos = {1: [0, 0], 2: [0, 1], 3: [0, 2],
               4: [1, 0], 5: [1, 1], 6: [1, 2],
               7: [2, 0], 8: [2, 1], 9: [2, 2],
               '*': [3, 0], 0: [3, 1], '#': [3, 2]}
    # 시작 위치 지정
    left_pos = num_pos['*']
    right_pos = num_pos['#']

    for n in numbers:
        now_pos = num_pos[n]
        # 무조건 왼손으로 누르는 버튼과 오른손으로 누르는 버튼 처리
        if n in [1, 4, 7]:
            answer += 'L'
            left_pos = now_pos
        elif n in [3, 6, 9]:
            answer += 'R'
            right_pos = now_pos
        # 중앙 숫자들에 대한 처리
        else:  # 2, 5, 8, 0
            left_center = 0
            right_center = 0
            # 거리 계산하기 ( 절대값 사용 )
            for lp, rp, np in zip(left_pos, right_pos, now_pos):
                left_center += abs(lp - np)
                right_center += abs(rp - np)
            # 가까운 손에 따른 처리
            if left_center < right_center:
                answer += 'L'
                left_pos = now_pos
            elif left_center > right_center:
                answer += 'R'
                right_pos = now_pos
            # 두 손의 거리가 같은 경우 처리
            else:
                # 왼손잡이 / 오른손잡이 처리
                if hand == 'left':
                    answer += 'L'
                    left_pos = now_pos
                else:
                    answer += 'R'
                    right_pos = now_pos

    return answer

실행 결과

정상적으로 실행된다!


End

728x90
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > Programmers_Python' 카테고리의 다른 글

[프로그래머스] 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천  (0) 2023.02.12
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임  (0) 2023.02.12
[Python] 오늘의 연습 문제 풀기 5편  (0) 2022.12.01
[Python] 프로그래머스 코딩테스트 입문 Day1  (0) 2022.12.01
[Python] 오늘의 연습 문제 풀기 4편  (0) 2022.11.30
'Coding Test/Programmers_Python' 카테고리의 다른 글
  • [프로그래머스] 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천
  • [프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임
  • [Python] 오늘의 연습 문제 풀기 5편
  • [Python] 프로그래머스 코딩테스트 입문 Day1
ThreeLight
ThreeLight
ThreeLight Studio의 블로그, TimeMap.exe에 오신 것을 환영합니다.
  • ThreeLight
    TimeMap.exe
    ThreeLight
  • 전체
    오늘
    어제
    • 분류 전체보기 (245)
      • Checkpoint (1)
      • (3D)Dev Deep Dive (0)
        • Templates & Guides (9)
        • Frontend origin (9)
        • Backend origin (1)
        • TroubleShootings (4)
      • Development Study (95)
        • Frontend (36)
        • Backend (21)
        • CS(Computer Science) (2)
        • Background Knowledges (11)
        • Algorithm (2)
        • Mobile (3)
        • AWS (6)
        • Python (6)
        • MSW(MapleStoryWorlds) (8)
      • Coding Test (59)
        • 문제.zip (1)
        • BaekJoon_JavaScript (0)
        • Programmers_JavaScript (9)
        • BaekJoon_Python (23)
        • Programmers_Python (10)
        • Undefined_Python (3)
        • Programmers_SQL (13)
      • 활동내역.zip (43)
        • 개인 (21)
        • Techeer (12)
        • Bootcamp (7)
        • Hackathon (1)
        • TeamProjects (2)
      • 여기 괜찮네??(사이트 | App) (5)
      • 재미있는 주제들 (8)
      • 개발 외 공부 저장소 (11)
        • 생산운영관리 (3)
        • 생활속의금융 (6)
        • 경영정보시스템 (2)
  • 링크

    • TimeMap.dmg (Portfolio)
    • GitHub 바로가기
    • 오픈프로필(카카오톡)
    • Medium 바로가기
    • Disquiet 바로가기
    • LinkedIn 바로가기
  • 인기 글

  • 태그

    JavaScript
    프로그래머스
    HTML
    Python
    programmers
    SQL
    Baek Joon
    TypeScript
    CSS
    react
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
ThreeLight
[프로그래머스] 2020 카카오 인턴십 - 키패드 누르기
상단으로

티스토리툴바