def solution(arrows):
# 8방향의 백터를 각각 나타낸다. 처음부터 0~7의 순서다.
vx = [0, 1, 1, 1, 0, -1, -1, -1]
vy = [1, 1, 0, -1, -1, -1, 0, 1]
visited = set() # 방문한 좌표를 저장한다. 집합을 사용하여 관리한다.
edges = set() # 지나간 경로 저장 (중복 방문 방지)
x, y = 0, 0
visited.add((x, y)) # 시작점 방문 처리
answer = 0 # 생긴 방 개수
for d in arrows:
for _ in range(2): # 대각선 교차 처리를 위해 0.5칸 단위로 2번 나눠 이동한다
nx = x + vx[d]
ny = y + vy[d]
edge = ((x, y), (nx, ny)) # 현재 위치에서 다음 위치로 간다
rev_edge = ((nx, ny), (x, y)) # 거꾸로도 저장한다
# 방이 발생한 경우를 나타낸다
if (nx, ny) in visited and edge not in edges:
answer += 1
visited.add((nx, ny)) # 새 위치 방문 처리
edges.add(edge) # 경로 저장
edges.add(rev_edge) # 반대 방향도 저장해서 중복 체크 방지
x, y = nx, ny # 현재 위치 갱신
return answer