본문으로 바로가기
dy, dx = [-1, 1, 0, 0], [0, 0, -1, 1]
cmd = {'U': 0, 'D': 1, 'L': 2, 'R': 3}


def solution(dirs):
    visited = [[[0] * 4 for _ in range(11)] for _ in range(11)]
    cur = [5, 5]
    ans = 0
    for i in dirs:
        y = cur[0]
        x = cur[1]
        ny = y + dy[cmd[i]]
        nx = x + dx[cmd[i]]
        if ny < 0 or nx < 0 or ny >= 11 or nx >= 11:
            continue
        cur = [ny, nx]
        if i == 'U':
            if visited[ny][nx][1] == 0:
                ans += 1
            visited[y][x][0] = 1
            visited[ny][nx][1] = 1
        elif i == 'D':
            if visited[ny][nx][0] == 0:
                ans += 1
            visited[y][x][1] = 1
            visited[ny][nx][0] = 1
        elif i == 'L':
            if visited[ny][nx][3] == 0:
                ans += 1
            visited[y][x][2] = 1
            visited[ny][nx][3] = 1
        else:
            if visited[ny][nx][2] == 0:
                ans += 1
            visited[y][x][3] = 1
            visited[ny][nx][2] = 1
    return ans

 

각 지점마다 상하좌우의 visited을 따로 관리해주기 위해 3차원 배열로 visited을 만들었다.

3차원 배열 선언을 처음에 잘못해서 제대로 동작하지 않았다!

그 부분만 조심하면 쉽게 해결하는 문제.