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
방문한 좌표를 저장하는 방식으로는 이 문제를 풀 수 없다. 그 대신, 이동 전 좌표와 이동 후 좌표를 리스트로 저장하여 방문한 길을 나타낼 수 있다.
길은 [(pos_x, pos_y), (nx, ny)]
= [(이동 전 xy 좌표),(이동 후 xy 좌표)]
로 구성할 수 있다.
방문한 길을 visited에 넣기 전에는 꼭 sort()
를 해야한다.
예를들어 [(5, 5), (5, 6)]
이 visited에 들어있는 상태에서, 'L'
을 통해 [(5, 6), (5, 5)]
를 수행하게 되면 기존에 방문한 길이지만 visited에는 없는 값으로 인식되어 answer+=1
하게된다.