ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] lv1 - 키패드 누르기
    알고리즘 2021. 6. 12. 16:29

    <내 풀이>

    def finder(a):
        smartphone = [[1,2,3],[4,5,6],[7,8,9],[11,0,12]]
        for i in range(0,4):
          for j in range(0,3):
            if smartphone[i][j] == a:
              return (i,j)
    
    def m_distance(a,b):
      distance = 0
      for i in range(0,2):
        distance += abs(a[i] - b[i])
      return distance
    
    def solution(numbers, hand):
        
        left = [1,4,7]
        right = [3,6,9]
        answer = []
        answer_left = [11]
        answer_right = [12]
        
        for i in numbers:
            if i in left:
                answer.append('L')
                answer_left.append(i)
            elif i in right:
                answer.append('R')
                answer_right.append(i)
            else:
                if m_distance(finder(i), finder(answer_left[-1])) < m_distance(finder(i), finder(answer_right[-1])):
                  answer.append('L')
                  answer_left.append(i)
    
                elif m_distance(finder(i), finder(answer_left[-1])) == m_distance(finder(i), finder(answer_right[-1])):
                  if hand == "right":
                    answer.append('R')
                    answer_right.append(i)
                  else:
                    answer.append('L')
                    answer_left.append(i)
                else:
                  answer.append('R')
                  answer_right.append(i)
    
        answer = ''.join(answer)
    
        return answer

    언뜻봐선 인형뽑기보다 쉬울줄 알았는데 훨씬 복잡했다...

    특히 거리구하기 공식을 구현하는데에 어려움이 있었다. 그래서 인터넷을 참고하여 맨하탄 거리구하기 함수를 만들어 넣었다.

    유클리드로 거리를 구할 수도 있지만 대각선으로 이동하지 않았기에 맨하탄 거리를 이용했다.

    또한, 2차원배열에서의 인덱스를 구하기 위한 함수도 만들어서 넣었다. (1차원 인덱스찾기처럼 될 줄알았는데 안됐다 ㅠㅠ )

    이부분을 다른 분들 풀이를 보니 딕셔너리를 이용하여 구현한 분들도 있었다.

    또한 이후에 오류가 한번 더 있었는데 거리구하기로 손가락 이동한 이후 부분엔 answere_right(left)에  최신값으로 갱신해주지 않아서 생긴 문제였다.

    다른 분들은 이부분을 그냥 리스트로 처리하지않고 값을 계속 바꿔주는 방식으로 활용했다. 가장 최신 손가락 위치만 알면 되기에 굳이 리스트로 처리하지 않아도 되는게 맞는 것 같다.

Designed by Tistory.