프로그래머스 키패드 누르기 코드 및 해설 (파이썬)
2021. 6. 1. 15:45ㆍalgorithm
반응형
https://programmers.co.kr/learn/courses/30/lessons/67256
solution 함수의 left엔 현재 왼손의 위치, right엔 현재 오른손의 위치를 저장하고, answer에 입력할 숫자에 따라 사용해야 할 손을 추가하는 방식으로 풀이했습니다. 1,4,7, 3,6,9 등 손이 정해져 있는 경우는 정해져 있는 손으로 입력하도록 하고, 2,5,8,0의 경우 문제 설명에 따라 더 가까운 손이, 거리가 같다면 왼손잡이냐, 오른손잡이냐에 따라 선택하도록 했습니다.
이때 거리를 알기 위해 get_index 함수와 distance 함수를 사용했습니다. get_index 함수에선 키패드를 2d array로 보고, 숫자가 있는 [행,열]을 반환하도록 했습니다. distance 함수에선 이렇게 반환한 [행,열]을 활용하여, 입력해야할 숫자와 현재 왼손 또는 오른손이 있는 위치를 받아 인덱스의 차를 구해 거리를 계산했습니다.
# 키보드를 2d array로 보고 [행,열]을 반환하도록 함
def get_index(number):
if number not in [3,6,9, '#', '*', 0]:
pos = [number//3, number%3-1]
elif number in [3,6,9]:
pos = [number//3-1, 2]
else:
if number == '*':
pos = [3,0]
elif number == 0:
pos = [3,1]
else:
pos = [3,2]
return pos
# 키보드를 2d array로 보고, 해당하는 index의 차를 구해 거리를 구함
def distance(number, current_pos):
distance = 0
for x, y in zip(get_index(number), get_index(current_pos)):
distance += abs(x-y)
return distance
def solution(numbers, hand):
answer = ''
# 현재 왼손, 오른손의 위치
left = '*'
right = '#'
# 왼손, 오른손의 담당 번호들
lefts = [1,4,7]
rights = [3,6,9]
for number in numbers:
# 1, 4, 7
if number in lefts:
answer += 'L'
left = number
# 3, 6, 9
elif number in rights:
answer += 'R'
right = number
# 2, 5, 8, 0
else:
# 왼손이 더 가까이 있으면 왼손이
if distance(number, left) < distance(number, right):
answer += 'L'
left = number
# 오른손이 더 가까이 있으면 오른손이
elif distance(number, left) > distance(number, right):
answer += 'R'
right = number
# 거리가 같으면 왼손잡이냐, 오른손잡이냐에 따라 결정
else:
if hand == 'right':
answer += 'R'
right = number
else:
answer += 'L'
left = number
return answer
반응형
'algorithm' 카테고리의 다른 글
프로그래머스 기능개발 코드 및 해설 (파이썬) (0) | 2021.06.02 |
---|---|
프로그래머스 짝지어 제거하기 코드 및 해설 (파이썬) (0) | 2021.06.02 |
프로그래머스 보석쇼핑 코드 및 해설 (파이썬) (0) | 2021.06.01 |
프로그래머스 JadenCase 문자열 만들기 코드 및 해설 (파이썬) (0) | 2021.06.01 |
프로그래머스 오픈채팅방 코드 및 해설 (파이썬) (0) | 2021.06.01 |