π λ¬Έμ
μΈμ λνκ΅ μννμ°κ΅¬μ€μ μ¬μ§μ€μΈ μκ΅μλ μ λ₯κ° μΉ¨ν¬(percolate) ν μ μλ μ¬μ λ¬Όμ§μ κ°λ°νκ³ μλ€. μ΄ μ¬μ λ¬Όμ§μ 2μ°¨μ M × N 격μλ‘ ννλ μ μλ€. νΈμμ 2μ°¨μ 격μμ μμͺ½μ λ°κΉ₯μͺ½(outer side), μλμͺ½μ μμͺ½(inner side)λΌκ³ μκ°νκΈ°λ‘ νλ€. λν κ° κ²©μλ κ²μμ μλλ©΄ ν°μμΈλ°, κ²μμμ μ λ₯λ₯Ό μ°¨λ¨νλ λ¬Όμ§μμ λ»νκ³ ν°μμ μ λ₯κ° ν΅ν μ μλ λ¬Όμ§μμ λ»νλ€. μ λ₯λ μ¬μ λ¬Όμ§μ κ°μ₯ λ°κΉ₯μͺ½ ν°μ 격μλ€μ 곡κΈλκ³ , μ΄νμλ μνμ’μ°λ‘ μΈμ ν ν°μ 격μλ€λ‘ μ λ¬λ μ μλ€.
κΉ κ΅μκ° κ°λ°ν μ¬μ λ¬Όμ§μ λνλ΄λ μ λ³΄κ° 2μ°¨μ 격μ ννλ‘ μ£Όμ΄μ§ λ, λ°κΉ₯μͺ½μμ νλ € μ€ μ λ₯κ° μμͺ½κΉμ§ μΉ¨ν¬λ μ μλμ§ μλμ§λ₯Ό νλ¨νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μλ₯Ό λ€μ΄, Figure 1(a) μμλ λ°κΉ₯μͺ½μμ 곡κΈλ μ λ₯κ° μμͺ½κΉμ§ μΉ¨ν¬νμ§λ§, Figure 1(b)μμλ κ·Έλ μ§ λͺ»νλ€.
πμ λ ₯
첫째 μ€μλ 격μμ ν¬κΈ°λ₯Ό λνλ΄λ M (2 ≤ M ≤ 1,000) κ³Ό N (2 ≤ N ≤ 1,000) μ΄ μ£Όμ΄μ§λ€. Mμ€μ κ±Έμ³μ, Nκ°μ 0 λλ 1 μ΄ κ³΅λ°± μμ΄ μ£Όμ΄μ§λ€. 0μ μ λ₯κ° μ ν΅νλ ν°μ, 1μ μ λ₯κ° ν΅νμ§ μλ κ²μμ 격μμμ λ»νλ€.
πμΆλ ₯
λ°κΉ₯μμ νλ €μ€ μ λ₯κ° μμͺ½κΉμ§ μ μ λ¬λλ©΄ YESλ₯Ό μΆλ ₯νλ€.κ·Έλ μ§ μμΌλ©΄ NOλ₯Ό μΆλ ₯νλ€.
π λ¬Έμ ν΄μ
첫λ²μ§Έ μ€ λ§μ§λ§ μ€λ‘ κ° μ μλμ§ μ²΄ν¬νλ©΄ λλ λ¬Έμ μλ€. μμμ μλλ‘ λ΄λ €κ°λκΉ μ΄λλ°©ν₯μ μΌμͺ½, μ€λ₯Έμͺ½, μλ μ΄λ κ² 3κ°μ§λ§ λμλ€! κ·Έλ¬λ 100%μμ νλ Έμ΅λλ€ νμ μ λ°μλ€. λ°μμ λ΄λ €κ°λ€κ° λ€μ μλ‘ μ¬λΌκ°λ κ²½μ°λ₯Ό μκ°νμ§ λͺ»νλ κ²μ΄λ€γ
π νμ΄
BFSλ₯Ό μ¬μ©νμ¬ νμλ€. μ μΌ μμͺ½ λ°°μ΄μ€ μμ§ λ°©λ¬Ένμ§ μμ 0μ μ°Ύμ BFSλ₯Ό μμνμλ€. κ·Έλ¦¬κ³ νμμ λ§μΉκ³ μ μΌ λ§μ§λ§ μ€μ λ°©λ¬Έμ¬λΆλ₯Ό 체ν¬νμ¬ YES λλ NOλ₯Ό μΆλ ₯νμλ€.
π» μ½λ
import sys
from collections import deque
input = sys.stdin.readline
n,m = map(int,input().rstrip().split())
ans = "NO"
graph = []
dx = [1,-1,0,0]
dy = [0,0,1,-1]
visited = [[False for i in range(m)] for j in range(n)]
for i in range(n):
graph.append(list(map(int,input().rstrip())))
# BFS ν¨μ μ μ
def bfs(x,y):
queue= deque()
visited[y][x] = True # λ°©λ¬Έμ²λ¦¬
queue.append([x,y])
while queue:
a,b = queue.popleft()
for i in range(4):
nx = a + dx[i]
ny = b + dy[i]
if -1 < nx < m and -1 < ny < n:
if not visited[ny][nx] and graph[ny][nx] == 0: # μμ§ λ°©λ¬Ένμ§ μκ³ μμκ° 0μ΄λΌλ©΄
visited[ny][nx] = True
queue.append([nx,ny])
for start in range(m):
if graph[0][start] == 0 and not visited[0][start]: # 첫λ²μ§Έ μ€ μμ κ°μ΄ 0μ΄λΌλ©΄
bfs(start,0) # BFS νμ μμ
for end in range(m):
if visited[-1][end]: # λ§μ§λ§ μ€μ λ°©λ¬Ένμλ€λ©΄
ans = "YES"
break
print(ans)
π λ¬Έμ λ§ν¬ : μΉ¨ν¬
'Problem Solving > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 15312λ²: μ΄λ¦ κΆν© - νμ΄μ¬ (1) | 2022.06.13 |
---|---|
[λ°±μ€] 1107λ²: 리λͺ¨μ½ - νμ΄μ¬ (0) | 2022.06.10 |
[λ°±μ€] 1926λ²: κ·Έλ¦Ό - νμ΄μ¬ (0) | 2022.06.08 |
[λ°±μ€] 2448λ²: λ³μ°κΈ° - νμ΄μ¬ (0) | 2022.06.06 |
[λ°±μ€] 14494λ²: λ€μ΄λλ―Ήμ΄ λμμ? - νμ΄μ¬ (0) | 2022.06.05 |