고려해야 할 문제
1. 같은 점을 다른 경로를 통해 돌아오는 것이 아니라 그냥 같은 길을왕복해서 돌아올 수 있음
->간선을 따로저장
2. 대각선이교차할 때
-> 간선의 길이를 0.5로 설정하여 한 방향으로두 번나아가기
visited_nodes와 지나온 간선을 저장하는 visited_edges 생성visited_edges는 무방향 간선 그래프로 설정2번 진행노드 셋에 있고, 나아갈 간선이 간선 셋에 없으면 정답에 1 추가추가def solution(arrows):
answer = 0
dx = [-1, -1, 0, 1, 1, 1, 0, -1]
dy = [0, 1, 1, 1, 0, -1, -1, -1]
x, y = 0, 0
visited_nodes = set()
visited_edges = set() # 같은 길 왕복하는 경우도 있을 수 있으므로 간선까지 고려
visited_nodes.add((x, y))
for d in arrows:
for _ in range(2): # 대각선 교차 고려해서 0.5 길이씩 두 번
nx = x + dx[d]
ny = y + dy[d]
# 새로운 경로로 노드 다시 방문한 경우
if ((x, y), (nx, ny)) not in visited_edges:
if (nx, ny) in visited_nodes:
answer += 1
visited_nodes.add((nx, ny))
# 무방향 간선
visited_edges.add(((x, y), (nx, ny)))
visited_edges.add(((nx, ny), (x, y)))
x, y = nx, ny
return answer