문제
1 2 3
4 5 6
7 8 9
* 0 #
위와 같은 키패드가 주어진다.
0 ~ 9 까지의 숫자가 담긴 배열 numbers가 주어지고,
1, 4, 7은 왼손으로, 3, 6, 9는 오른손으로 키패드를 누른다고 가정한다.
2, 5, 8, 0은 더 가까운 손가락으로 누르고 거리가 같다면 왼손잡이는 왼손, 오른손잡이는 오른손으로 누른다.
번호를 다 눌렀을 때 눌렸던 손가락의 순서를 return 하시오.
내 코드
matrix = [[0]*3]*4
matrix = [
[1,2,3],
[4,5,6],
[7,8,9],
['*',0,'#']
]
def find_position(n):
ny, nx = 0, 0
for y in range(0, 4):
for x in range(0, 3):
if matrix[y][x] == n:
ny = y
nx = x
break
return ny, nx
# 시작위치
left = {'y': 3, 'x' : 0}
right = {'y' : 3, 'x' : 2}
def solution(numbers, hand):
result = ""
for n in numbers:
if n == 1 or n == 4 or n == 7: #1, 4, 7은 무조건 L
ly, lx = find_position(n)
left['y'] = ly
left['x'] = lx
result += "L"
elif n == 3 or n == 6 or n == 9: #3, 6, 9는 무조건 R
ry, rx = find_position(n)
right['y'] = ry
right['x'] = rx
result += "R"
else:
ty, tx = find_position(n)
if ( abs(ty - left['y']) + abs(tx - left['x']) ) > ( abs(ty - right['y']) + abs(tx - right['x'])):
right['y'] = ty
right['x'] = tx
result += "R"
elif ( abs(ty - left['y']) + abs(tx - left['x'])) < ( abs(ty - right['y']) + abs(tx - right['x'])):
left['y'] = ty
left['x'] = tx
result += "L"
else:
if hand == "right":
right['y'] = ty
right['x'] = tx
result += "R"
else:
left['y'] = ty
left['x'] = tx
result += "L"
return result
문제 풀이
현재의 왼손과 오른손의 위치를 좌표로 저장해놓은 후, 손가락이 움직이면 그에 따라 좌표를 변경한다.
만약 2, 5, 8, 0을 누를 차례가 되면 누를 숫자의 좌표와 현재 왼/오른손의 좌표값의 차이를 구한 후
더 작은 숫자의 손가락을 움직인다.
'Python > Programmers' 카테고리의 다른 글
Lv.1-약수의 개수와 덧셈 (0) | 2021.07.10 |
---|---|
Lv.1-숫자 문자열과 영단어 (0) | 2021.07.08 |
Lv.1-내적 구하기 (0) | 2021.07.07 |
Lv.1-크레인 인형뽑기 (0) | 2021.07.07 |
Lv.1-모의고사 (0) | 2021.07.07 |