input
으로 입력받은 번호를 휴대폰 키패드에서 어떤 손(왼손, 오른손)으로 누르는 것이 더 효율적인지 묻는 문제. left right를 output
으로 return
먼저 반복문으로 input
으로 입력받은 숫자를 키패드 왼쪽/오른쪽/가운데 케이스별로 나누어 처리하고 중간 숫자의 경우 좌표를 이용하여 (dict) index의 번호와 최근에 접근한 R, L의 거리를 비교
이때 거리 계산은 처음에 피타고라스의 정리를 이용했지만 runtime error문제 발생. 문제에서 좌표간의 거리가 아니라 좌표의 이동에 대한 힌트가 있었음. 그래서 x-x' + y-y'값으로 거리를 설정(좌표가 한칸씩 이동한다는 문제의 전제 활용)
def solution(numbers, hand): answer = ''; n = numbers; pos = {1:[1,1], 2:[1,2], 3:[1,3], 4:[2,1], 5:[2,2], 6:[2,3], 7:[3,1], 8:[3,2], 9:[3,3], "*":[4,1], 0:[4,2], "#":[4,3]}; ll = ["*"]; rr = ["#"]; for i in range(len(n)): if n[i] in [1,4,7]: answer += "L" ll.append(n[i]) elif n[i] in [3,6,9]: answer += "R" rr.append(n[i]) else: np = pos.get(n[i]); lp = pos.get(ll[-1]); rp = pos.get(rr[-1]); ld = abs((np[0]-lp[0])) + abs((np[1]-lp[1])); rd = abs((np[0]-rp[0])) + abs((np[1]-rp[1])); if ld < rd: answer += "L" ll.append(n[i]) elif ld > rd: answer += "R" rr.append(n[i]) else: if hand == "left": answer += "L" ll.append(n[i]) else: answer += "R" rr.append(n[i]) return answer
참고할만한 코드도 비슷하여 모범코드 X