문제링크 : https://programmers.co.kr/learn/courses/30/lessons/67256
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
문제설명
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하는 solution 함수
알고리즘
1. 숫자가 3 6 9 이면 결과에 R을 추가하고 오른손의 위치를 이동
2. 숫자가 1 4 7 이면 결과에 L을 추가하고 왼손 위치를 이동
3. 결과가 2 5 8이면 왼손의 위치와 오른손의 위치를 통해 거리를 구하고 짧은거리의 손을 이동
4. answer return .
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | def solution(numbers, hand): left = [3,0] right = [3,2] answer = '' for num in numbers: if num==0 : num=11 if num == 3 or num== 6 or num== 9: answer+='R' right=[int(num/3-1),2] elif num == 1 or num== 4 or num== 7: answer+='L' left = [int(num/3),num%3-1] else : right_dist = abs(right[0]-int(num/3))+abs(right[1]-int(num%3-1)) left_dist = abs(left[0]-int(num/3))+abs(left[1]-int(num%3-1)) if right_dist > left_dist : answer+='L' left = [int(num/3),num%3-1] elif left_dist>right_dist : answer+='R' right = [int(num/3),num%3-1] else : if hand == 'right': answer+='R' right = [int(num/3),num%3-1] else : answer+='L' left = [int(num/3),num%3-1] return answer | cs |
'파이썬 > 프로그래머스' 카테고리의 다른 글
[python] 프로글래머스 - 멀쩡한 사각형 (0) | 2020.08.04 |
---|---|
[python] 프로그래머스 - 실패율 (0) | 2020.08.04 |
[python] 프로그래머스 - 스킬트리 (0) | 2020.08.04 |
[python] 프로그래머스 - 베스트 앨범 (0) | 2020.08.04 |
[python] 프로그래머스 - 위장 (0) | 2020.08.04 |