알고리즘/백준

[Silver III] 도시와 비트코인 - 31575 (python)

KimMinGyun 2024. 6. 24. 03:43

문제 링크

 

분류

너비 우선 탐색, 깊이 우선 탐색, 그래프 이론, 그래프 탐색

 

문제 설명

전날에 비해 비트코인의 시세가 백만원이나 오른 어느 아침, 진우는 거래소에 가서 비트코인을 매도하려고 한다. 현재 비트코인의 시세가 점점 떨어지고 있기 때문에 진우는 최대한 빨리 거래소에 가야 한다.

도시는 가로 N, 세로 M 크기의 격자 모양으로 이루어졌다. 진우는 북서쪽 끝에 있고 거래소는 남동쪽 끝에 있다. 도시의 일부 구역은 공터 또는 도로라서 진우가 지나갈 수 있지만, 어떤 구역은 건물이 있어서 진우가 갈 수 없다.

진우는 최대한 빨리 거래소에 가야 하므로, 동쪽(오른쪽) 또는 남쪽(아래쪽)으로만 이동하여 거래소로 도착할 수 있어야 한다. 진우를 도와 거래소로 갈 수 있는지 구하는 프로그램을 작성하여라. 진우의 현재 위치가 거래소일 수 있다.

입력

첫 번째 줄에 도시의 가로 크기 N과 세로 크기 M(1≤N,M≤300)이 주어진다.

두 번째 줄부터 M개의 줄에는 도시의 형태를 나타내는 N개의 정수가 공백을 사이에 두고 주어진다. 각 칸이 1인 경우 진우가 갈 수 있는 칸을 의미하고 0인 경우 진우가 갈 수 없는 칸을 의미한다.

왼쪽 위의 끝 칸과 오른쪽 아래의 끝 칸은 모두 1이다.

출력

첫 번째 줄에 진우가 거래소로 갈 수 있으면 Yes를, 그렇지 않으면 No를 출력한다.

 

 

코드

 

from collections import deque
import sys
input = sys.stdin.readline

n, m = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(m)]

q = deque([(0, 0)])

while q:
    r, c = q.popleft()

    for i in [(0, 1), (1, 0)]:
        nr = r + i[0]
        nc = c + i[1]

        if 0<=nr<m and 0<=nc<n and graph[nr][nc] == 1:	# 갈수있는 지역
            graph[nr][nc] += graph[r][c]
            q.append((nr, nc))

if graph[m-1][n-1]+1 == n+m:
    print('Yes')
else:
    print('No')