문제
나의 풀이
1. s에 키패드 저장, cur_L, cur_R에 현재 엄지 손가락 위치 저장(처음 위치는 주어진대로)
2. 1, 4, 7 은 L, 3, 6, 9는 R 지정
3. 그 외 숫자는 위치 비교해서 각각의 거리 차 구하기, 같다면 오른손잡이 왼손잡이에 따라 표현
import numpy as np
def solution(numbers, hand):
    answer = []
    for i in numbers:
        index = np.where(s == i)
        if i == 1 or i == 4 or i == 7:
            answer.append("L")
            cur_L.clear()
            cur_L.append([int(index[0]), int(index[1])])
        elif i == 3 or i == 6 or i == 9:
            answer.append("R")
            cur_R.clear()
            cur_R.append([int(index[0]), int(index[1])])
        else:
            re_L = abs(index[0] - cur_L[0][0]) + abs(index[1] - cur_L[0][1])
            re_R = abs(index[0] - cur_R[0][0]) + abs(index[1] - cur_R[0][1])
            if re_L > re_R:
                answer.append("R")
                cur_R.clear()
                cur_R.append([int(index[0]), int(index[1])])
            elif re_R > re_L:
                answer.append("L")
                cur_L.clear()
                cur_L.append([int(index[0]), int(index[1])])
            else:
                if hand == "right":
                    answer.append("R")
                    cur_R.clear()
                    cur_R.append([int(index[0]), int(index[1])])
                else:
                    answer.append("L")
                    cur_L.clear()
                    cur_L.append([int(index[0]), int(index[1])])
    return ''.join(answer)
s = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [11, 0, 12]])
cur_L = [[3,0]]
cur_R = [[3,2]]
- 2차원 배열의 index를 표현하는 방법을 몰라 헤맸다.(numpy 사용)
 
- s 배열에 처음부터 위치를 원소로 넣는 방법으로 푼 경우도 봤다.
 
key_dict = {1:(0,0),2:(0,1),3:(0,2),
            4:(1,0),5:(1,1),6:(1,2),
            7:(2,0),8:(2,1),9:(2,2),
            '*':(3,0),0:(3,1),'#':(3,2)}
다른 풀이
def solution(numbers, hand):
    answer = ''
    key_dict = {1:(0,0),2:(0,1),3:(0,2),
                4:(1,0),5:(1,1),6:(1,2),
                7:(2,0),8:(2,1),9:(2,2),
                '*':(3,0),0:(3,1),'#':(3,2)}
    left = [1,4,7]
    right = [3,6,9]
    lhand = '*'
    rhand = '#'
    for i in numbers:
        if i in left:
            answer += 'L'
            lhand = i
        elif i in right:
            answer += 'R'
            rhand = i
        else:
            curPos = key_dict[i]
            lPos = key_dict[lhand]
            rPos = key_dict[rhand]
            ldist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
            rdist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])
            if ldist < rdist:
                answer += 'L'
                lhand = i
            elif ldist > rdist:
                answer += 'R'
                rhand = i
            else:
                if hand == 'left':
                    answer += 'L'
                    lhand = i
                else:
                    answer += 'R'
                    rhand = i
    return answer
numpy 패키지
- 과학 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 여러 유용한 기능을 제공
 
import numpy as np
a = np.array['Apple', 'Grape', 'Peach']
np.where(a == 'Grape')   -> array([1])
s = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [11, 0, 12]])
np.where(s == 3)  ->  array([0]), array([2])
numpy, where
Typeerror