반응형
이번 문제는 2020년 카카오 인턴 코딩 테스트에 나온 문제다.
num2key는 번호를 누르면 해당 좌표로 변환하는 코드를 의미한다. 1~9까지는 수식으로 정의하였고, 0의 경우 (3,1) 좌표를 리턴하는 형태로 지정했다.
[1, 4, 7]에 해당하는 키패드는 왼손으로 먼저 클릭하고, [3, 6, 9]에 해당하는 키패드는 오른손으로 먼저 클릭해야 하기 때문에, [2, 5, 8, 0]에 해당하는 값만 잘 설정하면 된다.
[2, 5, 8, 0]에서는 왼손과 오른손의 현재 위치에 따라 달리 클릭되기 때문에 클릭될 때마다 좌표값을 받아서 왼손 혹은 오른손의 좌표를 기억하고, 만약 같은 경우 두 값의 차이를 바탕으로 어느 손으로 클릭할 지 처리할 수 있다.
만약 두 값의 차이가 같다면, 왼손 잡이인지 오른손 잡이인지를 보고 판단할 수 있다. 위 설명을 코드로 작성하면 아래와 같다.
def num2key(num):
'''
input:
number
output:
coordinate
'''
if num == 0:
return (3, 1)
col = num % 3 - 1 if num % 3 != 0 else 2
row = num // 3 if num % 3 != 0 else num // 3 - 1
return row, col
def solution(numbers, hand):
l_row, l_col = 3, 0
r_row, r_col = 3, 2
answers = ''
for num in numbers:
row, col = num2key(num)
if num in [1, 4, 7]:
answers += 'L'
l_row = row
l_col = col
elif num in [3, 6, 9]:
answers += 'R'
r_row = row
r_col = col
else:
# if num in [2, 5, 8, 0], then calculate distance about the left or right hand
l_v = abs(l_row - row) + abs(l_col - col)
r_v = abs(r_row - row) + abs(r_col - col)
if r_v > l_v:
answers += 'L'
l_row = row
l_col = col
elif r_v < l_v:
answers += 'R'
r_row = row
r_col = col
else:
if hand == 'right':
r_row = row
r_col = col
answers += 'R'
else:
l_row = row
l_col = col
answers += 'L'
return answers
'Python > Algorithm' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기 - Python (4) | 2023.08.24 |
---|---|
[프로그래머스] 크레인 인형뽑기 게임 - Python (0) | 2023.08.24 |
[프로그래머스] 성격 유형 검사 - Python (2) | 2023.08.24 |
[프로그래머스] 공원 산책 - Python (0) | 2023.08.24 |
[프로그래머스] 달리기 경주 - Python (0) | 2023.08.24 |