반응형
def solution(numbers, hand):
pad_id = {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]}
L_location = [3,0]
R_location = [3,2]
result = []
while(numbers != []):
if numbers[0] == 1 or numbers[0] == 4 or numbers[0] == 7:
result.append('L')
L_location = pad_id[numbers[0]]
del numbers[0]
elif numbers[0] == 3 or numbers[0] == 6 or numbers[0] == 9:
result.append('R')
R_location = pad_id[numbers[0]]
del numbers[0]
else: # 숫자가 2,5,8,0 일때
# 왼손 오른손의 위치와 눌러야할 패드의 위치 사이의 L1_distance를 구한다.
L_distance = abs(L_location[0]-pad_id[numbers[0]][0]) + abs(L_location[1]-pad_id[numbers[0]][1])
R_distance = abs(R_location[0]-pad_id[numbers[0]][0]) + abs(R_location[1]-pad_id[numbers[0]][1])
if L_distance > R_distance:
result.append('R')
R_location = pad_id[numbers[0]]
del numbers[0]
elif L_distance < R_distance:
result.append('L')
L_location = pad_id[numbers[0]]
del numbers[0]
else:
if hand == "right":
result.append('R')
R_location = pad_id[numbers[0]]
del numbers[0]
else:
result.append('L')
L_location = pad_id[numbers[0]]
del numbers[0]
# print(result,numbers)
answer = ''
for i in range(len(result)):
answer += result[i]
return answer
키패드를 좌표로 설정하기위해 딕셔너리를 사용하였다.
2,5,8,0 만 잘 처리하면 쉬운 문제라 생각하였으나 채점에서 문제가 있었다.
if numbers[0] == (1 or 4 or 7) 이 동작하는줄 알았지만 그렇지 않았고
if numbers[0] == 1 or numbers[0] == 4 or numbers[0] == 7로 수정하여 문제를 해결했다.
반응형
'코딩테스트 연습' 카테고리의 다른 글
프로그래머스_핸드폰 번호 가리기_파이썬 (0) | 2020.12.23 |
---|---|
프로그래머스_하샤드수_파이썬 (0) | 2020.12.22 |
다리를 지나는 트럭_ 파이썬 (0) | 2020.12.15 |
[프로그래머스]주식가격 (0) | 2020.12.10 |
[프로그래머스]멀쩡한사각형_python (0) | 2020.12.09 |
댓글