[프로그래머스] 방문 길이

박형진·2021년 11월 16일
0

https://programmers.co.kr/learn/courses/30/lessons/49994


1. 전체 코드

def solution(dirs):
   answer = 0
   d = {'U': (-1, 0), 'D': (1, 0), 'R': (0, 1), 'L': (0, -1)}
   visited = []
   pos_x = 5
   pos_y = 5
   for i in list(dirs):
       x, y = d[i]
       nx = pos_x + x
       ny = pos_y + y
       if 0 <= nx < 11 and 0 <= ny < 11:
           path = [(pos_x, pos_y), (nx, ny)]  # (from, to)
           path.sort()
           if path not in visited:
               answer += 1
               visited.append(path)
           pos_x = nx
           pos_y = ny
   return answer

2. 풀이

방문한 좌표를 저장하는 방식으로는 이 문제를 풀 수 없다. 그 대신, 이동 전 좌표와 이동 후 좌표를 리스트로 저장하여 방문한 길을 나타낼 수 있다.
길은 [(pos_x, pos_y), (nx, ny)] = [(이동 전 xy 좌표),(이동 후 xy 좌표)]로 구성할 수 있다.

방문한 길을 visited에 넣기 전에는 꼭 sort()를 해야한다.
예를들어 [(5, 5), (5, 6)]이 visited에 들어있는 상태에서, 'L'을 통해 [(5, 6), (5, 5)]를 수행하게 되면 기존에 방문한 길이지만 visited에는 없는 값으로 인식되어 answer+=1 하게된다.

profile
안녕하세요!

0개의 댓글