https://programmers.co.kr/learn/courses/30/lessons/86052
기존 dfs 알고리즘에서 빛이 나가는 4가지의 방향을 고려하여 코드를 작성하였습니다.
빛이 한 지점에서 4가지 방향 중 하나로 나가면 1
로 설정하여 경로를 체크하였습니다.
만약 빛이 사이클을 돌다가 중복으로 나간다면 (1
로 체크된 방향을 중복해서 지나가면) while
문을 중단하고 여태 센 cnt
를 반환해줍니다.
나아가는 방향 계산은 S
일 경우에는 따로 계산하지 않고 그대로 방향에 좌표를 더해주고, L
과 R
일 때만 따로 계산하여 좌표에 더해주었습니다. 만약 계산결과가 인덱스를 벗어나는 결과가 나오면 다시 처음으로 돌아가기 때문에 나머지 연산을 통해 해당 계산을 구현하였습니다.
def dfs(i,j,k,field,grid):
dx = [1,0,-1,0]
dy = [0,-1,0,1]
cnt = 0
row = len(grid)
col = len(grid[0])
while True:
if field[i][j][k] == 1:
return (cnt)
field[i][j][k] = 1
i = (i + dx[k]) % row
j = (j + dy[k]) % col
if grid[i][j] == 'R':
k = (k + 1) % 4
elif grid[i][j] == 'L':
k = (k + 3) % 4
cnt += 1
def solution(grid):
answer = []
row = len(grid)
col = len(grid[0])
field = [[[0,0,0,0] for i in range(col)] for j in range(row)]
for i in range(row):
for j in range(col):
for k in range(4):
if field[i][j][k] == 0:
answer.append(dfs(i,j,k,field,grid))
answer.sort()
return answer
저는 이거 못풀었는데 대단하시네요 참치돌고래님!