반응형
문제설명
스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.
이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
- 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.
- 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다.
- 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다.
- 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.
4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers 배열의 크기는 1 이상 1,000 이하입니다.
- numbers 배열 원소의 값은 0 이상 9 이하인 정수입니다.
- hand는 "left" 또는 "right" 입니다.
- "left"는 왼손잡이, "right"는 오른손잡이를 의미합니다.
- 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.
전체코드(Python)
def distance(left,right,point,hand):
# 왼쪽과 오른쪽 엄지중 가까운 위치에 있는 엄지로 눌러야 하므로 거리를 계산하여
# l과 r에 저장한다.
l = abs(left[0]-point[0]) + abs(left[1]-point[1])
r = abs(right[0]-point[0]) + abs(right[1]-point[1])
if l < r :
left = point
win = 'L'
return left,win
elif l>r :
right = point
win = 'R'
return right,win
else:
#4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.
if hand == 'left':
left = point
win = 'L'
return left,win
else:
right = point
win = 'R'
return right,win
def solution(numbers, hand):
answer = ''
lp = [3,0]
rp = [3,2]
#엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.
for index in range(len(numbers)):
if numbers[index] == 0:
# 값이 0인경우 일반적인 경우와 달라 0의 위치정보를 location에 저장한다.
location = (3,1)
else:
# y좌표를 (숫자-1)을 3으로 나눈 몫
# x좌표를 (숫자+2)의 나머지 값
"""
ex) (5-1)//3 = 1
(5+2)%3 = 1
"""
location = ((numbers[index]-1)//3,(numbers[index]+2)%3)
#왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다.
if numbers[index]%3 == 1:
answer+='L'
lp = location
#오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다.
elif numbers[index]%3 == 0 and numbers[index]!=0:
answer+='R'
rp = location
#가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.
else:
point,result = distance(lp,rp,location,hand)
if result == 'L':
lp = point
else:
rp = point
answer+=result
return answer
혹시라도 정정할 내용이나 추가적으로 필요하신 정보가 있다면 댓글 남겨주시면 감사하겠습니다.
오늘도 Jindory 블로그에 방문해주셔서 감사합니다.
[참고]
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 셔틀버스(Python) (0) | 2022.03.24 |
---|---|
[프로그래머스] 가장 먼 노드(Python) (0) | 2022.03.24 |
[프로그래머스] 소수 만들기(Java/Python) (0) | 2022.03.23 |
[프로그래머스] 숫자 문자열과 영단어(Python) (0) | 2022.03.16 |
[프로그래머스] 다리를 지나가는 트럭(Python) (0) | 2022.03.16 |