[프로그래머스] [카카오인턴] 키패드 누르기 (파이썬/Python)

2025. 6. 22. 01:07·Coding Practice/Programmers
728x90

📖 문제

[프로그래머스] [카카오인턴] 키패드 누르기 (파이썬/Python)

  • 난이도: Level 1
  • 유형: 그리디
문제 요약

  • 숫자 키패드를 누르는 문제이다.
  • 손가락은 왼손 엄지와 오른손 엄지만 사용하며, 특정 규칙에 따라 번호를 누른다.
  • numbers: 누를 번호의 순서를 담은 배열
  • hand: 왼손잡이인지 오른손잡이인지 나타내는 문자열 ("left" 또는 "right")
  • 각 번호를 누를 때 사용한 손을 'L', 'R'로 이어붙인 문자열을 반환해야 한다.

 


🔍 문제 접근

💡 문제 분석
  • 키패드는 2차원 배열처럼 구성되어 있다.
  • 왼쪽 열 (`1`, `4`, `7`)은 항상 왼손으로,
  • 오른쪽 열 (`3`, `6`, `9`)은 항상 오른손으로 누른다.
  • 가운데 열 (`2`, `5`, `8`, `0`)은 현재 손가락 위치와의 거리를 계산해 가까운 손으로 누른다.
  • 만약 거리가 같다면 `hand` 값에 따라 결정한다.

 

💡 풀이 아이디어
  • 각 키패드를 좌표값으로 변환하여 거리 계산을 한다. (맨해튼 거리: `|x1 - x2| + |y1 - y2|`)
  • 왼손, 오른손의 현재 위치를 기억하면서 순차적으로 조건을 검사한다.

🔍 문제 풀이

♻️ 코드 플로우
  1. 키패드를 2차원 좌표로 매핑한다.
  2. 시작 위치는 왼손은 `*` , 오른손은 `#`이다.
  3. 순서대로 numbers 배열을 순회하면서:
    • 왼쪽 열 숫자 → `L`
    • 오른쪽 열 숫자 → `R`
    • 가운데 숫자 → 거리 비교 후 결정
  4. 각 경우에 따라 손 위치 갱신
  5. 누른 손을 문자열로 이어붙여 최종 반환

 

🚩 제출한 소스 코드

def solution(numbers, hand):
    answer = '' 
    pad = {'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 = pad['*']
    right = pad['#']
    
    for num in numbers:
        # 왼손이 눌러야 하는 번호
        if num in (1, 4, 7):
            answer += 'L'
            left = pad[str(num)]
        # 오른손이 눌러야 하는 번호
        elif num in (3, 6, 9):
            answer += 'R'
            right = pad[str(num)]
        # 가운데 번호일 경우 (2, 5, 8, 0)
        else:

            # 해당 번호와 왼손 거리
            left_dist = abs(left[0] - pad[str(num)][0]) + abs(left[1] - pad[str(num)][1])
            # 해당 번호와 오른손 거리
            right_dist = abs(right[0] - pad[str(num)][0]) + abs(right[1] - pad[str(num)][1])
            
            # 더 가까운 거리 
            if left_dist < right_dist:
                answer += 'L'
                left = pad[str(num)]
            elif left_dist > right_dist:
                answer += 'R'
                right = pad[str(num)]
            # 왼손과 오른손 거리가 같을 경우
            else:
                if hand == 'right':
                    answer += 'R'
                    right = pad[str(num)]
                else:
                    answer += 'L'
                    left = pad[str(num)]
                    
        
    return answer


💡회고

  • 전형적인 그리디 & 구현 문제라고 생각한다. 그리디 전략을 기반으로 조건을 분기해 처리하면 된다. 처음에는 조건이 많아 어려워보였지만 규칙에 따라 풀이하면 되는 것 같다.
  • 핸드폰 키패드를 2차원 배열 좌표로 생각하면 된다는 아이디어가 핵심이었던 것 같다.

 

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

'Coding Practice > Programmers' 카테고리의 다른 글

[프로그래머스] # 프렌즈4블록 (파이썬/Python)  (1) 2025.07.06
[프로그래머스] #완주하지 못한 선수 (자바/Java)  (2) 2025.07.04
[프로그래머스] #구명보트 (자바/Java)  (1) 2025.06.28
[프로그래머스] #디스크 컨트롤러 (파이썬/Python)  (1) 2025.06.08
[2022카카오테크인턴십] 성격유형 검사하기 (Python / 파이썬)  (2) 2023.10.09
'Coding Practice/Programmers' 카테고리의 다른 글
  • [프로그래머스] #완주하지 못한 선수 (자바/Java)
  • [프로그래머스] #구명보트 (자바/Java)
  • [프로그래머스] #디스크 컨트롤러 (파이썬/Python)
  • [2022카카오테크인턴십] 성격유형 검사하기 (Python / 파이썬)
밍구링구리
밍구링구리
밍구리의 실험실 이것저것 배우고 기록을 남깁니다
  • 밍구링구리
    Mingguri Labatory
    밍구링구리
  • 전체
    오늘
    어제
    • 분류 전체보기 (81) N
      • Language & Framework (15) N
        • Java (3) N
        • Vue.js (1)
        • Spring Boot (10) N
      • Computer Science (2) N
        • Operating System) (0)
        • Database (0)
        • Network (1) N
        • Data Structure (0)
        • Algorithm (1)
      • Architecture & Design (7)
      • Cloud & Infra (5)
      • Trouble Shooting (0)
        • 에러 해결 (0)
        • 삽질 기록 (0)
      • 회고 (0)
      • Coding Practice (32) N
        • Backjoon (17)
        • LeetCode (6)
        • Programmers (9) N
      • ETC (18)
        • 일상 (1)
        • 후기 (2)
        • 밍구의 실험실 (1)
        • 🤔Study . Question🔍 (14)
      • 부트캠프 (1) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 깃허브
    • 소개
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 태그

    SOLID
    OOP
    git
    구현
    골드4
    LeetCode
    스터디
    객체지향
    알고리즘
    프로그래머스
    코딩테스트
    퀴즈
    문제
    BFS
    백준
  • 250x250
  • hELLO· Designed By정상우.v4.10.3
밍구링구리
[프로그래머스] [카카오인턴] 키패드 누르기 (파이썬/Python)
상단으로

티스토리툴바