사용 언어: python 3.9.5
https://programmers.co.kr/learn/courses/30/lessons/67256
level 1
딕셔너리에 좌표를 저장해두고 거리를 계산한다.
def solution(numbers, hand):
dic = {1: (0, 0), 2: (0, 1), 3: (0, 2), 4: (1, 0), 5: (1, 1),
6: (1, 2), 7: (2, 0), 8: (2, 1), 9: (2, 2), 0: (3, 1)}
answer = []
left = (3,0)
right = (3,2)
for n in numbers:
if n in [1, 4, 7]:
answer.append('L')
left = dic[n]
elif n in [3, 6, 9]:
answer.append('R')
right = dic[n]
else:
left_n = abs(dic[n][0]-left[0]) + abs(dic[n][1]-left[1])
right_n = abs(dic[n][0]-right[0]) + abs(dic[n][1]-right[1])
if left_n == right_n:
if hand == "left":
answer.append('L')
left = dic[n]
else:
answer.append('R')
right = dic[n]
elif left_n < right_n:
answer.append('L')
left = dic[n]
else:
answer.append('R')
right = dic[n]
# print(f"left: {left}, right: {right}, answer: {answer}")
return ''.join(answer)
성공
33분
과거에도 푼 문제였음
과거 풀이
def solution(numbers, hand):
nums = [[j+(i*3) for j in range(0, 3)]for i in range(4)]
L_pos: int = 9
R_pos: int = 11
answer = ''
for n in numbers:
# 숫자 전처리
if n == 0:
n = 10
else:
n -= 1
# 가장자리
if n in [0, 3, 6]:
answer += 'L'
elif n in [2, 5, 8]:
answer += 'R'
else:
# 더 가까운 거리 비교
L_dis = abs((L_pos//3) - (n//3)) + abs((L_pos % 3) - (n % 3))
R_dis = abs((R_pos // 3) - (n // 3)) + abs((R_pos % 3) - (n % 3))
if L_dis == R_dis:
answer += 'L' if hand[0] == 'l' else 'R'
else:
answer += 'L' if L_dis < R_dis else 'R'
if answer[-1] == 'L':
L_pos = n
else:
R_pos = n
return answer