"지나가 본 길을 어떻게 저장할지" 가 중요한 문제다.
출발점인 (0,0)
을 visited[5][5]
위치로 설정했다.
점 사이를 거리로 보고, 각 위치의 점은 4개의 False 로 초기화한 아이템을 갖는 list 값을 갖는다.
list는 방문 여부에 대한 flag 이다. (오른쪽에서 방문, 아래에서 방문, 왼쪽에서 방문, 위에서 방문)
예를 들어, 출발점인 (5,5)는 visited[5][5]
이고, visited[5][5] = [False, False, False, False]
로 초기화 되어있다.
(6,4) (6,5) (6,6)
-----------------
| | |
-----------------
(5,4) (5,5) (5,6)
dirs
를 for문 돌면서, index 가능여부를 체크를 하고 이동이 가능하다면,d
에 맞게 이동을 시킨다.ex) (3,5) 위치에서 d 가 "U" 라면
y 는 4가 되고 (3,5) 에서 (4,5) 로 이동하는 것이기 때문에
visited[4][5][1] = True # (4,5) 의 아래에서 방문 여부 True
visited[3][5][3] = True # (3,5) 의 위에서 방문 여부 True
def solution(dirs):
answer = 0
# R, D, L, U
visited = [[[False, False, False, False] for _ in range(11)] for _ in range(11)]
y, x = 5, 5
for d in dirs:
if d == "U":
if 0 <= y < 10:
y += 1
if not visited[y][x][1] and not visited[y-1][x][3]:
visited[y][x][1] = True
visited[y-1][x][3] = True
answer += 1
elif d == "D":
if 0 < y <= 10:
y -= 1
if not visited[y][x][3] and not visited[y+1][x][1]:
visited[y][x][3] = True
visited[y+1][x][1] = True
answer += 1
elif d == "R":
if 0 <= x < 10:
x += 1
if not visited[y][x][2] and not visited[y][x-1][0]:
visited[y][x][2] = True
visited[y][x-1][0] = True
answer += 1
else:
if 0 < x <= 10:
x -= 1
if not visited[y][x][0] and not visited[y][x+1][2]:
visited[y][x][0] = True
visited[y][x+1][2] = True
answer += 1
return answer