728x90
시간 제한 1초, 메모리 제한 512MB
# 조건
- 인제대학교 생화학연구실에 재직중인 석교수는 전류가 침투(percolate) 할 수 있는 섬유 물질을 개발하고 있다.
- 이 섬유 물질은 2차원 M × N 격자로 표현될 수 있다. 편의상 2차원 격자의 위쪽을 바깥쪽(outer side),
- 아래쪽을 안쪽(inner side)라고 생각하기로 한다.
- 또한 각 격자는 검은색 아니면 흰색인데, 검은색은 전류를 차단하는 물질임을 뜻하고 흰색은 전류가 통할 수 있는 물질임을 뜻한다.
- 전류는 섬유 물질의 가장 바깥쪽 흰색 격자들에 공급되고, 이후에는 상하좌우로 인접한 흰색 격자들로 전달될 수 있다.
- 김 교수가 개발한 섬유 물질을 나타내는 정보가 2차원 격자 형태로 주어질 때, 바깥쪽에서 흘려 준 전류가 안쪽까지 침투될 수 있는지 아닌지를 판단하는 프로그램을 작성하시오.
- 예를 들어 위에 침투하지만, 아래는 침투하지 못한다.
입력
- 첫째 줄에는 격자의 크기를 나타내는 M (2 ≤ M ≤ 1,000) 과 N (2 ≤ N ≤ 1,000) 이 주어진다.
- M줄에 걸쳐서, N개의 0 또는 1 이 공백 없이 주어진다.
- 0은 전류가 잘 통하는 흰색, 1은 전류가 통하지 않는 검은색 격자임을 뜻한다.
출력
- 바깥에서 흘려준 전류가 안쪽까지 잘 전달되면 YES를 출력한다.
- 그렇지 않으면 NO를 출력한다.
# 접근 방법
- BFS를 활용하면 된다.
- 0행부터 1을 발견한 경우 BFS 함수를 수행해준다.
- 이 때, VISITED => 이미 방문한 칸이라면 CONTINUE 해주고 그렇지 않다면 Q에 넣어준다.
- 출력 형식 꼭.!!!! 잘 확인하자.. 맞게 풀었음에도 UPPER CASE가 아닌 Title case로 return 하여 틀렸습니다를 받았다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
from collections import deque
def bfs(bi, bj, visited, arr):
q = deque([(bi, bj)])
while q:
si, sj = q.popleft()
if si == N-1:
return 1
for d in range(4):
ni, nj = si + di[d], sj + dj[d]
if 0<=ni<N and 0<=nj<M and arr[ni][nj] == '0' and not visited[ni][nj]:
q.append((ni, nj))
visited[ni][nj] = 1
return 0
def check(arr):
global visited
visited = [[0] * M for _ in range(N)]
for j in range(M):
if arr[0][j] == '0' and not visited[0][j]:
visited[0][j] = 1
flag = bfs(0, j, visited, arr)
if flag:
return 'YES'
return 'NO'
def main():
global N, M
N, M = map(int, input().split())
arr = [list(input().strip()) for _ in range(N)]
print(check(arr))
if __name__ == "__main__":
di, dj = [1, -1, 0, 0], [0, 0, 1, -1]
main()
728x90
'ALGORITHM > DFS, BFS, 그래프 탐색' 카테고리의 다른 글
[백준 13913번] 파이썬 - 숨바꼭질 4 (0) | 2024.03.20 |
---|---|
[백준 17141번] 파이썬 - 연구소 2 (1) | 2024.02.12 |
[백준 5014번] python, c++ - 스타트링크 (1) | 2024.01.02 |
[백준 2583번] 파이썬, c++ - 영역 구하기 (1) | 2023.12.31 |
[백준 3187번] 파이썬 - 양치기 꿍 (1) | 2023.12.27 |