728x90

https://programmers.co.kr/learn/courses/30/lessons/67256#qna

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

import math

def solution(numbers, hand):
    answer = ''
    num = {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], 0:[3,1], -1:[3,0], -2:[3,2]}
    l_num = [1,4,7]
    r_num = [3,6,9]
    l = -1
    r = -1
    for i in numbers:
        if i in l_num:
            answer += "L"
            l = i
        elif i in r_num:
            answer += "R"
            r = i
        else:
            if abs(num[l][0]-num[i][0]) + abs(num[l][1]-num[i][1]) < abs(num[r][0]-num[i][0]) + abs(num[r][1]-num[i][1]):
                answer += "L"
                l = i
            elif abs(num[l][0]-num[i][0]) + abs(num[l][1]-num[i][1]) > abs(num[r][0]-num[i][0]) + abs(num[r][1]-num[i][1]):
                answer += "R"
                r = i
            else:
                if hand == "right":
                    answer += "R"
                    r = i
                else:
                    answer += "L"
                    l = i
    return answer

상하좌우만 가능, 대각선 불가능 => 거리 구하기 공식으로 했다가 실패함

상하, 좌우 거리 따로 구해서 비교

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기