def solution(numbers, hand):
answer = ''
left = '*'
right = '#'
for num in numbers :
if num % 3 == 1 :
answer += 'L'
left = num
elif num != 0 and num % 3 == 0 :
answer += 'R'
right = num
else :
temp = [[i, i+1, i+2] for i in [1, 4, 7]]
temp2 = []
temp.append(['*', 0, '#'])
if num >= 1 and num <= 9 :
numX = temp[(num-1)//3].index(num)
numY = (num-1) // 3
else :
numX = 1
numY = 3
for val in [left, right] :
if val in ['*', 0, '#'] :
valX = temp[3].index(val)
valY = 3
else :
valX = temp[(val-1)//3].index(val)
valY = (val-1) // 3
dist = abs(valX - numX) + abs(valY - numY)
temp2.append(dist)
if temp2[0] < temp2[1] :
answer += 'L'
left = num
elif temp2[1] < temp2[0] :
answer += 'R'
right = num
else :
answer += hand[0].upper()
if hand == "left" :
left = num
else :
right = num
return answer
쉬워보였는데 은근 헷갈려서 계속 헤맸다 .. 1시간 걸림 ㅠ
키패드 번호판 그대로 2차원 배열 temp 만들 때
temp = [[i, i+1, i+2] for i in range([1, 4, 7])] (x)
temp = [[i, i+1, i+2] for i in [1, 4, 7]] (o)
그리고 키패드 가운데 있는 숫자들이면
왼손/오른손 각각 거리 계산해줘서 더 짧은 거리로 가야 해서
편하게 계산하려고 최상단 왼쪽 (0, 0) 로 두고 좌표 설정해줬다
근데 여기서 3칸씩 있다고 아무 생각없이
numX = temp[num // 3].index(num)
numY = num // 3
라고 쓰면? 당연히 틀림
예를 들어 키패드 3은 맨위 0번째 행에 있는데 위 식대로면 1이 나오기 때문,,
numX = temp[(num-1) // 3].index(num)
numY = (num-1) // 3
처럼 (num - 1) // 3 라고 해줘야 한다.....
그리고 현재 왼손/오른손 위치 (변수 left/right) 갱신해주는 거 자꾸 빼먹어서 헤멨다
정신 빠짝 차려야지 ^_^
'알고리즘' 카테고리의 다른 글
[프로그래머스 Lv1 - 2018 KAKAO BLIND RECRUITMENT] 비밀지도 (Python) (0) | 2022.07.01 |
---|---|
[프로그래머스 Lv1 - 2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 (Python) (0) | 2022.06.30 |
[프로그래머스 Lv1 - 2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어 (Python) (0) | 2022.06.30 |
[프로그래머스 Lv1 - 2019 KAKAO BLIND RECRUITMENT] 실패율 (Python) (0) | 2022.06.30 |
[프로그래머스 Lv1 - 2021 KAKAO BLIND RECRUITMENT] 신규 아이디 추천 (Python) (0) | 2022.06.30 |