Notice
Recent Posts
Recent Comments
Link
초보 개발자의 일기
Programmers - 키패드 누르기 본문
어려웠던 문제...! 1레벨 문제중에 가장 오래걸렸다. 풀어서 다행이다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인지를 나타내는 문자열 hand가 매개변수로 주어질 때,
각 번호를 누른 엄지손가락이 왼손인지 오른손인지를 연속된 문자열 형태로 나타내는 문제이다.
사용한 언어는 Python3 이다.
Manhattan distance를 이용해서 풀었다. 숫자별 좌표(finger)를 설정하고, manhattan 함수를 이용하여 거리를 구하고, 더 가까운 쪽의 손가락으로 키패드를 누른다. 키패드를 누르면 그 자리의 좌표를 손가락 변수(L_finger OR R_finger)에 저장한다.
def solution(numbers, hand):
def manhattan(p1, p2):
d = 0
for i in range(len(p1)):
d += abs(p1[i] - p2[i])
return d
answer = ''
finger = {1:[0, 0], 4:[1, 0], 7:[2, 0], '*':[3, 0], 2:[0, 1],5:[1, 1],8:[2, 1],0:[3, 1],3:[0, 2],6:[1, 2],9:[2, 2],'#':[3, 2]}
L_finger = finger['*']; R_finger = finger['#']
for i in numbers:
if i in (1, 4, 7):
L_finger = finger[i]
answer += 'L'
elif i in (3, 6, 9):
R_finger = finger[i]
answer += 'R'
else:
if manhattan(finger[i], L_finger) == manhattan(finger[i], R_finger):
if hand == 'left':
L_finger = finger[i]
answer += 'L'
else:
R_finger = finger[i]
answer += 'R'
elif manhattan(finger[i], L_finger) > manhattan(finger[i], R_finger):
R_finger = finger[i]
answer += 'R'
else:
L_finger = finger[i]
answer += 'L'
return answer
'열공일기 > 코딩연습' 카테고리의 다른 글
Programmers - 실패율 (0) | 2021.09.06 |
---|---|
Programmers - 2016년 (0) | 2021.09.06 |
Programmers - 숫자 문자열과 영단어 (0) | 2021.08.12 |
Programmers - 완주하지 못한 선수 (0) | 2021.08.09 |
Programmers - 수박수박수박수박수박수? (0) | 2021.08.08 |
Comments