본문 바로가기
알고리즘

[알고리즘] 키패드 누르기

by keel_im 2021. 4. 6.
반응형

포인트

  • 항상 문제를 익숙해질 필요가 있다고 생각합니다. 이번 문제는 구현을 하는 문제인데
    문제를 읽어보면서 어떻게 작성을 할까?를 고민한 것 같습니다. 
    그래서 왼손과 오른손 좌표를 저장을 해두고 움직일 때마다 업데이트를 하는 방식으로 구현을 하였습니다. 

🧶문서는 항상 수정될 수 있습니다. 비판은 환영합니다. 

python

def solution(numbers: list, hand: str) -> str:
	answer = ''
	left = [3, 0]
	right = [3, 2]
	mapping = {
		1: 'L', 4: 'L', 7: 'L',
		3: 'R', 6: 'R', 9: 'R',
		2: 'M', 5: 'M', 8: 'M', 0: 'M',
	}
	
	for num in numbers:
		if mapping[num] == 'M':
			pointer = [3, 1] if num == 0 else [num // 3, 1]
			
			left_d = abs(pointer[0] - left[0]) + abs(pointer[1] - left[1])
			right_d = abs(pointer[0] - right[0]) + abs(pointer[1] - right[1])
			
			if left_d < right_d:
				left = pointer
				answer += 'L'
			elif left_d > right_d:
				right = pointer
				answer += 'R'
			else:
				if hand == 'right':
					right = pointer
					answer += 'R'
				else:
					left = pointer
					answer += 'L'
		
		elif mapping[num] == 'L':
			answer += 'L'
			left = [num // 3, 0]
		elif mapping[num] == 'R':
			answer += 'R'
			right = [(num - 1) // 3, 2]
	
	return answer


print("LRLLLRLLRRL" == solution([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], 'right'))
print("LRLLRRLLLRR" == solution([7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2], 'left'))
print("LLRLLRLLRL" == solution([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], 'right'))

 

반응형

댓글