Agorithm/프로그래머스
프로그래머스 Level 1 키패드 누르기
kimjinho1
2022. 6. 13. 01:32
728x90
반응형
전에는 알고리즘 문제를 설렁설렁 어떻게든 풀기만 하는 느낌으로 넘어갔었는데, 이번에는 다시 공부한다는 생각으로
프로그래머스 문제들을 풀어보려고 한다.
클린코드도 복습하는 겸 나름 최대한 보기 좋게 짜보려고 한다.
풀이)
1. 거리를 구하기 위해서 우선 1: [0,0], 2:[0, 1] ... 9:[2, 2], 0:[3, 1]과 같이 숫자를 좌표로 변환해준다.
2. 숫자와 왼손, 오른손과의 거리를 구한다.
3. 그 이후는 각 상황에 맞게 ans에 'L', 'R'을 더하고 왼손과 오른손의 위치를 업데이트해주면 된다.
1, 4, 7 -> 왼손, 3, 6, 9 -> 오른손, 2, 5, 8, 0 -> 왼손과 오른손 중 가까운 손
def get_idx(n):
n = 10 if n == 0 else n-1
return [n//3, n%3]
def get_distance(n1, n2):
d1, d2 = get_idx(n1), get_idx(n2)
d = abs(d1[0] - d2[0]) + abs(d1[1] - d2[1])
return d
def get_nexthand(left, right, num, hand):
if num in [1, 4, 7]:
return 'left'
elif num in [3, 6, 9]:
return 'right'
else:
dl = get_distance(left, num)
dr = get_distance(right, num)
if dl < dr:
return 'left'
elif dl > dr:
return 'right'
elif dl == dr:
return hand
def solution(numbers, hand):
left, right = 10, 12
ans = ''
for num in numbers:
nexthand = get_nexthand(left, right, num, hand)
if nexthand == "left":
left = num
ans += 'L'
else:
right = num
ans += 'R'
return ans
728x90
반응형