개발자식

[프로그래머스] 키패드 누르기 본문

Algorithm/Programmers

[프로그래머스] 키패드 누르기

밍츠 2022. 8. 22. 02:22

키패드 누르기

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

 

프로그래머스

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

programmers.co.kr

 

나의 풀이

- 왼손, 오른손으로 누를 키보드 번호를 딕셔너리로 저장한다.

- 해당 키보드의 위치를 딕셔너리로 저장한다.

- 현재 위치를 리스트로 저장한다.

- numbers를 순회하면서

1. 해당 번호가 왼손, 오른손으로 눌러야 하는 키보드 번호인지 확인한다.

2. 위 해당 사항에 없는 키보드인 경우 오른손, 왼손 각각의 위치와 이동할 위치의 거리를 구한다.

ex [1,1] [2,0] 사이의 거리 : |2-1| + |0-1| = 2

3. 거리가 작은 손으로 이동한다. 

4. 거리가 같다면 hand값에 따라 처리한다.

* 이동할 때 마다 현재 위치 갱신

def solution(numbers, hand):
    answer = ''
    dict = {"L":[1,4,7],"R":[3,6,9]}
    position = {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]}        
    r = "*"
    l = "#"
    now = [r,l]
    
    for n in numbers:
        if n in dict["L"]:
            answer+="L"
            now[1] = n
        elif n in dict["R"]:
            answer+="R"
            now[0] = n
        else:
            r1 = abs(position[n][0] - position[now[0]][0]) + abs(position[n][1] - position[now[0]][1])
            l1 = abs(position[n][0] - position[now[1]][0]) + abs(position[n][1] - position[now[1]][1])
            if r1 > l1:
                answer += "L"
                now[1] = n
            elif r1 < l1:
                answer += "R"
                now[0] = n
            else:
                if hand == "right":
                    answer += "R"
                    now[0] = n
                else:
                    answer += "L"
                    now[1] = n
    
    return answer

 

 

Comments