[카카오 인턴] 키패드 누르기
문제 풀러 바로가기 👇👇👇👇👇👇
https://programmers.co.kr/learn/courses/30/lessons/67256
풀이 코드
def solution(numbers, hand):
answer = ''
left = (3, 0)
right = (3, 2)
key = [ (3, 1), (0,0), (0, 1), (0,2), (1,0), (1, 1), (1,2), (2,0), (2, 1), (2,2) ]
for number in numbers:
if number in [1, 4, 7]:
answer += "L"
left = key[number]
elif number in [3, 6, 9]:
answer += "R"
right = key[number]
else:
distance_l = abs(key[number][0] - left[0]) + abs(key[number][1] - left[1])
distance_r = abs(key[number][0] - right[0]) + abs(key[number][1] - right[1])
if distance_r < distance_l:
answer += "R"
right = key[number]
elif distance_r > distance_l:
answer += "L"
left = key[number]
else:
if hand == "right":
answer += "R"
right = key[number]
else:
answer += "L"
left = key[number]
return answer
문제 풀이
튜플을 이용해 문제를 구현해봤다. (행, 열) 형식
문제를 읽어보면 "*"과 "#" 입력은 없고 숫자만 입력되기 때문에
key에 인덱스(0~9) 숫자에 맞게 키패드의 위치정보를 넣어놨다.
왼쪽은 (3, 0) = *의 위치정보 / 오른쪽은 (3, 2) = #의 위치정보로 초기화했다.
조건에 따라 answer에 L과 R을 삽입했는데 1,4,7일 때는 L을 삽입해주고, 3,6,9 일 때는 R을 삽입해준다.
만약 두 경우가 아니라면 오른쪽과 왼쪽과 숫자 사이의 거리를 구해줘야한다.
대각선 이동은 없기 때문에 단순히 행은 행대로, 열은 열대로 거리계산을 해주면 된다.
(절대값 함수 abs()를 씌어주는 것이 포인트)
마지막으로 거리가 같다면 hand에 따라 조건문을 만들어 선택하도록 하면 된다.