https://www.acmicpc.net/problem/31575
알고리즘
좌측상단에서 우측하단까지의 길을 찾는 문제이다.
2차원인 배열을 1차원으로 바꾸어 그래프에 적용하였다. 현재 위치가 1인 상태에서 오른쪽이 1이면 이동가능이므로 그래프에 추가, 아래가 1이면 이동가능이므로 그래프에 추가한 뒤에 dfs를 실행한다.마지막 위치의 visited배열을 검사하여 True면 이동이 가능하므로 Yes를 출력해준다.dfs로 해결했지만, dp로도 풀 수 있는 문제인 것 같다.
코드
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
def dfs(graph, v, visited):
visited[v] = True
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
n,m = map(int,input().split())
graph = [[] for _ in range(n*m)]
arr = []
for _ in range(m):
arr.append(list(map(int,input().split())))
for i in range(m):
for j in range(n):
# right
if j+1 <n:
if arr[i][j] and arr[i][j+1]:
graph[i*n+j].append(i*n+j+1)
# down
if i+1 <m:
if arr[i][j] and arr[i+1][j]:
graph[i*n+j].append((i+1)*n+j)
visited = [False]*(n*m)
dfs(graph, 0, visited)
if visited[n*m-1]:
print("Yes")
else:
print("No")
'Koala - 17기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
[백준/Python] 2644번 : 촌수 계산 (0) | 2025.02.16 |
---|---|
[백준/Python] 2583번 : 영역 구하기 (0) | 2025.02.16 |
[PG/Python3] 아이템 줍기 (1) | 2025.02.12 |
[백준/Python] 16713번: Generic Queries (0) | 2025.02.09 |
[백준/자바] 11478. 서로 다른 부분 문자열의 개수 (0) | 2025.02.09 |