# 방의 개수 - 프로그래머스

방의 개수 - 프로그래머스

def solution(arrows):
    cnt, vertex_visited, edge_visited = 0, dict(), dict()
    dx = [-1, -1, 0, 1, 1, 1, 0, -1]
    dy = [0, 1, 1, 1, 0, -1, -1, -1]
    x, y = 0, 0
    vertex_visited[(x, y)] = 1
    for i in range(len(arrows)):
        for j in range(2):  # X자의 교차 형태를 세기 위함
            nx = x + dx[arrows[i]]
            ny = y + dy[arrows[i]]
            if vertex_visited.get((nx, ny), 0) == 1:
                if edge_visited.get((x, y, nx, ny), 0) == 0:
                    cnt += 1
            vertex_visited[(nx, ny)] = 1
            edge_visited[(x, y, nx, ny)] = 1  # 정방향
            edge_visited[(nx, ny, x, y)] = 1  # 역방향
            x, y = nx, ny
    return cnt