반응형
https://programmers.co.kr/learn/courses/30/lessons/67256
정답 코드
def solution(numbers, hand):
answer = ''
key = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#']]
left = [1, 4, 7, '*']
right = [3, 6, 9, "#"]
last_left = '*' #왼손의 마지막 위치 저장
last_right = '#'
for i in numbers:
if(i in left):
answer = answer + "L"
last_left = i
elif(i in right):
answer = answer + "R"
last_right = i
else:
#마지막 왼손의 위치와 i 위치를 비교
#마지막 오른손의 위치와 i 위치를 비교
#둘의 차이 중 작은 값 저장하고 손의 위치를 변경
# 계산한 거리차 담는 곳
l_dis = 99
r_dis = 99
for k in range(4):
for j in range(3):
if key[k][j] == i:
# 왼쪽 손의 좌표
for l_row in range(4):
for l_col in range(3):
if (key[l_row][l_col] == last_left):
l_dis = abs(k-l_row) + abs(j-l_col)
# 오른 손의 좌표
for r_row in range(4):
for r_col in range(3):
if (key[r_row][r_col] == last_right):
r_dis = abs(k-r_row) + abs(j-r_col)
if(l_dis < r_dis):
answer = answer + "L"
last_left = i
elif(l_dis > r_dis):
answer = answer + "R"
last_right = i
else:
if(hand == "left"):
answer = answer + "L"
last_left = i
else:
answer = answer + "R"
last_right = i
return answer
키패드의 위치를 이차원 배열로 생각하면 어렵지 않게 해결할 수 있다.
for문들의 위치에 주의해야 하며
거리 값을 계산할 때 절댓값 함수를 씌우는 곳에 주의해야 한다.
좋아요를 가장 많이 받은 코드에는 key의 위치를 이차원 배열이 아닌 딕셔너리를 활용하였다.
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)}
딕셔너리를 이런 방식으로도 작성하여 활용할 수 있다니
잊지 않고 다음 번 유사한 문제가 나왔을 때 적용할 수 있도록 해야겠다.
반응형
'algorithm > Programmers' 카테고리의 다른 글
[Programmers] 리코쳇 로봇 (Python) (0) | 2024.07.11 |
---|---|
[Programmers] 두 원 사이의 정수 쌍(Python, Java) (0) | 2024.07.04 |
[Programmers] 요격 시스템 (Python, Java) (0) | 2024.07.03 |
[Programmers] 등굣길 (Python, Java) (0) | 2024.07.02 |
[programmers] 정수 삼각형 - Python, Java (0) | 2024.07.01 |