https://programmers.co.kr/learn/courses/30/lessons/86052
import sys
sys.setrecursionlimit(1000000)
dy = [-1, 0, 1, 0]
dx = [0, 1, 0, -1]
w, h = 0, 0
used = []
grid = []
answer = []
def solution(gridd):
global w, h, used, grid, answer
grid = gridd
answer = []
h = len(grid)
w = len(grid[0])
used = [[[0]*4 for _ in range(w)] for _ in range(h)]
for i in range(h):
for j in range(w):
# 위 오 아래 왼
for k in range(4):
if used[i][j][k]:
continue
# 돌아~
go(i, j, k, 0)
answer.sort()
return answer
def go(cy, cx, d, count):
global used, answer
if used[cy][cx][d]:
answer.append(count)
return
used[cy][cx][d] = 1
ny = (cy + dy[d]) % h
nx = (cx + dx[d]) % w
# 어디로 쏠지
if grid[ny][nx] == "S":
go(ny, nx, d, count+1)
if grid[ny][nx] == "L":
go(ny, nx, (d-1) % 4, count+1)
if grid[ny][nx] == "R":
go(ny, nx, (d+1) % 4, count+1)