본문 바로가기
Algorithm/programmers

programmers 키패드누르기

by 갈잃자 2022. 8. 3.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


정성이 그득히 들어간 문제

 

최초엔 dfs나 bfs를 생각해봤으나 실현되어도 코드가 길어질 생각에 쉽사리 구현을 시작하지 못했다.

 

이것저것 생구현으로, if문 else문 돌리며 경우마다 //3 %3 하며 더하고 해봤지만, 결과는 실패ㅠㅠ

 

결국 다른 고수분들의 코드를 조금 인용하였는데, 너무 효율적으로 값을 뽑아냈길래 감탄함.

 

키패드의 수들을 index에 맞춰 좌표를 지정한 points라는 배열을 하나 만들고,

 

key가 2,5,8,0중 하나인 경우, y,x좌표의 값들을 서로 계산하여 움직임값들을 비교하면 끝!

def solution(numbers, hand):
    answer = ''
    # arr=[[1,2,3],[4,5,6],[7,8,9],[10,0,11]] *과 #을 10, 11 로 둠
    lhand = 10
    rhand = 11

    points = [(3, 1), (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 2)]
    while numbers:
        key = numbers.pop(0)

        if key in [1, 4, 7]:
            answer += "L"
            lhand = key
        elif key in [3, 6, 9]:
            answer += "R"
            rhand = key

        # key가 2,5,8,0중 하나인 경우
        else:
            lmove = abs(points[lhand][0] - points[key][0]) + abs(points[lhand][1] - points[key][1]) #
            rmove = abs(points[rhand][0] - points[key][0]) + abs(points[rhand][1] - points[key][1])

            if lmove > rmove:
                answer += "R"
                rhand = key
            elif rmove > lmove:
                answer += "L"
                lhand = key
            else:
                if hand == "right":
                    answer += "R"
                    rhand = key
                else:
                    answer += "L"
                    lhand = key

    return answer

 

 

이렇게 좌표가 나와있는 문제라면 앞으론 direct배열보단 이게 더 효율적이라는 생각이 듬

'Algorithm > programmers' 카테고리의 다른 글

programmers 실패율  (0) 2022.08.10
programmers 크레인 인형뽑기 게임  (0) 2022.08.09
programmers 숫자 문자열과 영단어  (0) 2022.08.02
programmers 신규 아이디 추천  (0) 2022.07.28
programmers 신고 결과 받기  (0) 2022.07.26

댓글