https://school.programmers.co.kr/learn/courses/30/lessons/67256
2020 카카오 인턴십
def solution(numbers, hand):
answer = ''
current_hand = [10, 12]
for i, n in enumerate(numbers):
if n == 0:
numbers[i] = 11
for num in numbers:
dist_1 = [num-1, num+1, num-3, num+3]
dist_2 = [num-2, num+2, num-4, num+4, num-6, num+6]
dist_3 = [num-5, num+5, num-7, num+7, num-9, num+9]
dist_4 = [num-8, num+8, num-10, num+10]
dist = [0, 0]
if num in [2, 5, 8, 11]:
if current_hand[0] in dist_1:
dist[0] = 1
elif current_hand[0] in dist_2:
dist[0] = 2
elif current_hand[0] in dist_3:
dist[0] = 3
elif current_hand[0] in dist_4:
dist[0] = 4
if current_hand[1] in dist_1:
dist[1] = 1
elif current_hand[1] in dist_2:
dist[1] = 2
elif current_hand[1] in dist_3:
dist[1] = 3
elif current_hand[1] in dist_4:
dist[1] = 4
if dist[0] == dist[1]:
if hand == 'left':
answer += 'L'
current_hand[0] = num
else:
answer += 'R'
current_hand[1] = num
elif dist[0] < dist[1]:
answer += 'L'
current_hand[0] = num
else:
answer += 'R'
current_hand[1] = num
elif num in [1, 4, 7]:
answer += 'L'
current_hand[0] = num
else:
answer += 'R'
current_hand[1] = num
return answer
어우 생각보다 너무 오래 걸렸다..
코드가 많이 길어져서 걱정했는데, 다른 사람들 코드 보니까 다 어느정도 길이가 나오는 듯
[*, 0, #] 부분을 [10, 11, 12]로 치환해서
현재 번호에서 +/-로 거리를 계산해서 그 거리를 기준으로 누를 손가락을 결정했음
타인 코드
def solution(numbers, hand):
answer = ''
key_dict = {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),
'*':(3,0),0:(3,1),'#':(3,2)}
left = [1,4,7]
right = [3,6,9]
lhand = '*'
rhand = '#'
for i in numbers:
if i in left:
answer += 'L'
lhand = i
elif i in right:
answer += 'R'
rhand = i
else:
curPos = key_dict[i]
lPos = key_dict[lhand]
rPos = key_dict[rhand]
ldist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
rdist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])
if ldist < rdist:
answer += 'L'
lhand = i
elif ldist > rdist:
answer += 'R'
rhand = i
else:
if hand == 'left':
answer += 'L'
lhand = i
else:
answer += 'R'
rhand = i
return answer
딕셔너리 안에 튜플로 각 번호의 좌표를 저장한 후,
좌우 거리와 상하 거리를 따로 계산후 합쳐서 거리를 구한 것 같음