[파이썬] 프로그래머스 : 빛의 경로 사이클 (Lv.2)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
방향성 생각
학부연구생 민상처럼 한 방향에 좌표마다 4가지 방향을 visit으로 처리한다.
DFS로 탐색. 사이클 재방문하면 탈출, 아니면 재귀
한 좌표에 같은 방향으로 입력이 들어오면 사이클 발생(재방문)이므로 탈출한다.
전체코드
import sys
sys.setrecursionlimit(10**8)
def solution(grid):
h,w = len(grid),len(grid[0])
visit = [[[False]*4 for _ in range(w)] for _ in range(h)]
step = [(1,0),(0,1),(-1,0),(0,-1)]
def dfs(x, y, dire, cnt):
visit[y][x][dire] = True
dx,dy = step[dire]
nx,ny = (x+dx)%w,(y+dy)%h
if grid[ny][nx] == 'S':
ndire = dire
elif grid[ny][nx] == 'L':
ndire = (dire-1)%4
elif grid[ny][nx] == 'R':
ndire = (dire+1)%4
if not visit[ny][nx][ndire]:
return dfs(nx,ny,ndire,cnt+1)
else:
return cnt
answer = []
for i in range(h):
for j in range(w):
for k in range(4):
if not visit[i][j][k]:
answer.append(dfs(j,i,k,1))
answer.sort()
return answer
코멘트
마법사 상어와 복제처럼 방향 시계, 반시계 전환 필요할 때 상하좌우가 아니라, 상 우 하 좌 이런식으로 정의하는게 편함.
'Algorithm > Graph' 카테고리의 다른 글
[파이썬] 백준 1327 : 소트게임 (골드5) (0) | 2023.08.24 |
---|---|
[파이썬] 프로그래머스 : 경주로 건설 (Lv.3) (0) | 2023.08.22 |
[파이썬] 백준 16946 : 벽 부수고 이동하기 4 (골드2) (0) | 2023.08.22 |
[파이썬] 백준 1005 : ACM Craft (골드3) (0) | 2023.08.18 |
[파이썬] 백준 21922: 학부 연구생 민상 (골드5) (0) | 2023.08.18 |
[파이썬] 백준 프로그래머스 : 합승 택시 요금 (Lv3) (0) | 2023.08.16 |
[파이썬] 백준 1504 : 특정한 최단 경로(골드4) (0) | 2023.08.16 |
댓글