연습장
17. 키패드 누르기 본문
[1,4,7] - 왼손
[3,6,9] - 오른손
[2,5,8,0] - 가까운쪽 손 거리가 같으면 hand 인 손
상하좌우로 거리 1 , 대각 2
1번 - 1.4,7 의 경우 - 왼손 고정
2번 - 3,6,9 의 경우 - 오른손 고정
def solution(numbers, hand):
answer = ''
for i in numbers:
if i in [1,4,7]: # 1번
answer += "L"
elif i in [3,6,9]: # 2번
answer +="R"
else :
answer +="?"
return answer
3번 - 2, 5, 8, 0
-> 현재 키패드 에서 가까운 손
-> 현재 L과 R 의 위치를 알아야되며 - 목표 위치까지의 거리를 비교 - 작은쪽 또는 거리가 같으면 hand 인 손 사용
위치를 어떻게 표시할까 ?
숫자판을 2중 배열로 정의하고
pmap = [[1,2,3],[4,5,6],[7,8,9],['*',0,'#']]
각 숫자의 위치를 x,y 좌표로 정의할 수 있다.
2 의 경우 pmap[0][1] => (0,1)
* 의 경우 pmap[3][0] => (3,0) ...
위의 테스트 예시의 4번째 ? 인
5의 경우
L = 4 , R = 3 , target = 5 이므로
L = 4 -> pmap[1][0] => (1,0)
R = 3 -> pmap[0][2] => (0,2)
target = 5 -> pmap[1][1] => (1,1)
이며 문제에서 두점 사이의 거리는 대각선 거리는 제외한다.
L-target 의 거리는 1이며
R-target 의 거리는 2가 되며
L 이 더 가깝게된다.
L 의 좌표를 xl,yl
R 의 좌표를 xr,yr
target 의 좌표를 xi,yi 라 할때 다음과 같이 구할 수 있다.
def solution(numbers, hand):
answer = ''
left = "*"
right = "#"
pmap = [[1,2,3],[4,5,6],[7,8,9],["*",0,"#"]]
for i in numbers:
# number 가 왼쪽
if i in [1,4,7]:
answer += "L"
left = i
# number 가 오른쪽
elif i in [3,6,9]:
answer +="R"
right = i
# number가 가운데일 경우
else :
# 좌표 값
xl,yl,xr,yr,xi,yi = 0,0,0,0,0,0
for x in range(4):
for y in range(3):
if left == pmap[x][y]:
xl,yl = x,y
if right == pmap[x][y]:
xr,yr = x,y
if i == pmap[x][y]:
xi,yi = x,y
# 비교
if abs(xi-xl)+abs(yi-yl) < abs(xi-xr)+abs(yi-yr):
answer += "L"
left = i
elif abs(xi-xl)+abs(yi-yl) > abs(xi-xr)+abs(yi-yr):
answer += "R"
right = i
else :
if hand == "left":
answer += "L"
left = i
else :
answer += "R"
right = i
return answer
'프로그래머스 > 1단계' 카테고리의 다른 글
19. 신규 아이디 추천 (0) | 2024.01.19 |
---|---|
18. 햄버거 만들기 (0) | 2024.01.19 |
16. 크레인 인형뽑기 게임 (0) | 2024.01.17 |
15. 이웃한 칸 (0) | 2024.01.17 |
14. 둘만의 암호 (0) | 2024.01.17 |