본문 바로가기
PS(Problem Solving)/프로그래머스_Programmers

[프로그래머스] 2020 카카오 인턴십 - 키패드 누르기 (파이썬) 문제 및 풀이

by 초코칩프라푸치노 2022. 8. 6.

문제) 프로그래머스 - 2020 카카오 인턴십 - 키패드 누르기

https://school.programmers.co.kr/learn/courses/30/lessons/67256?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이)

키 패드 구현과 분기 처리를 통해 쉽게 해결할 수 있는 문제입니다. 키패드를 Dictionary 자료형을 통해 key_pad에 저장합니다. 함수 내에서는 두 엄지손가락의 현재 위치를 추적하고, 숫자를 입력할 때마다 두 손 중 어떤 손을 사용해야 하는지 결정합니다.


이 함수는 숫자 배열 numbers와 손잡이 설정 hand를 받아서 각 숫자를 누를 때 어떤 엄지손가락을 사용해야 하는지를 반환합니다. 함수 내에서 왼손과 오른손의 위치를 계속 추적하며 거리를 계산하여, 가장 가까운 엄지손가락을 선택하도록 합니다. 왼손잡이와 오른손잡이 설정에 따라 다르게 동작하며, 결과는 문자열 형태로 반환됩니다.

 

 

import sys
input = sys.stdin.readline
# 키패드 저장
key_pad = {
0: [3, 1],
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],
'#': [3, 2],
}
# 키패드 길이 반환
def dist(a: list, b: list):
return abs(a[0] - b[0]) + abs(a[1] - b[1])
def solution(numbers, hand):
# 키패드 초기화
left_hand = key_pad['*']
right_hand = key_pad['#']
answer = ''
for now in numbers:
if now == 1 or now == 4 or now == 7:
left_hand = key_pad[now]
answer += 'L'
elif now == 3 or now == 6 or now == 9:
right_hand = key_pad[now]
answer += 'R'
else:
if dist(left_hand, key_pad[now]) > dist(right_hand, key_pad[now]):
right_hand = key_pad[now]
answer += 'R'
elif dist(left_hand, key_pad[now]) < dist(right_hand, key_pad[now]):
left_hand = key_pad[now]
answer += 'L'
else:
if hand == 'right':
right_hand = key_pad[now]
answer += 'R'
else:
left_hand = key_pad[now]
answer += 'L'
return answer

 

https://github.com/Chocochip101/Programmers/blob/main/KAKAO/2020kakao_internship_%ED%82%A4%ED%8C%A8%EB%93%9C%20%EB%88%84%EB%A5%B4%EA%B8%B0.py

 

GitHub - Chocochip101/Programmers

Contribute to Chocochip101/Programmers development by creating an account on GitHub.

github.com

 

반응형

댓글