[Baekjoon] 7569_ν λ§ν
λ¬Έμ (μΆμ²: https://www.acmicpc.net/problem/7569)
<ν λ§ν >
λ¬Έμ
μ² μμ ν λ§ν λμ₯μμλ ν λ§ν λ₯Ό 보κ΄νλ ν° μ°½κ³ λ₯Ό κ°μ§κ³ μλ€. ν λ§ν λ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ 격μλͺ¨μ μμμ μΉΈμ νλμ© λ£μ λ€μ, μμλ€μ μμ§μΌλ‘ μμ μ¬λ €μ μ°½κ³ μ 보κ΄νλ€.
μ°½κ³ μ 보κ΄λλ ν λ§ν λ€ μ€μλ μ μ΅μ κ²λ μμ§λ§, μμ§ μ΅μ§ μμ ν λ§ν λ€λ μμ μ μλ€. λ³΄κ΄ ν νλ£¨κ° μ§λλ©΄, μ΅μ ν λ§ν λ€μ μΈμ ν κ³³μ μλ μ΅μ§ μμ ν λ§ν λ€μ μ΅μ ν λ§ν μ μν₯μ λ°μ μ΅κ² λλ€. νλμ ν λ§ν μ μΈμ ν κ³³μ μ, μλ, μΌμͺ½, μ€λ₯Έμͺ½, μ, λ€ μ¬μ― λ°©ν₯μ μλ ν λ§ν λ₯Ό μλ―Ένλ€. λκ°μ λ°©ν₯μ μλ ν λ§ν λ€μκ²λ μν₯μ μ£Όμ§ λͺ»νλ©°, ν λ§ν κ° νΌμ μ μ λ‘ μ΅λ κ²½μ°λ μλ€κ³ κ°μ νλ€. μ² μλ μ°½κ³ μ 보κ΄λ ν λ§ν λ€μ΄ λ©°μΉ μ΄ μ§λλ©΄ λ€ μ΅κ² λλμ§ κ·Έ μ΅μ μΌμλ₯Ό μκ³ μΆμ΄ νλ€.
ν λ§ν λ₯Ό μ°½κ³ μ 보κ΄νλ 격μλͺ¨μμ μμλ€μ ν¬κΈ°μ μ΅μ ν λ§ν λ€κ³Ό μ΅μ§ μμ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ‘μ λ, λ©°μΉ μ΄ μ§λλ©΄ ν λ§ν λ€μ΄ λͺ¨λ μ΅λμ§, κ·Έ μ΅μ μΌμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ. λ¨, μμμ μΌλΆ μΉΈμλ ν λ§ν κ° λ€μ΄μμ§ μμ μλ μλ€.
μ λ ₯
첫 μ€μλ μμμ ν¬κΈ°λ₯Ό λνλ΄λ λ μ μ M, Nκ³Ό μμ μ¬λ €μ§λ μμμ μλ₯Ό λνλ΄λ Hκ° μ£Όμ΄μ§λ€. Mμ μμμ κ°λ‘ μΉΈμ μ, Nμ μμμ μΈλ‘ μΉΈμ μλ₯Ό λνλΈλ€. λ¨, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, 1 ≤ H ≤ 100μ΄λ€. λμ§Έ μ€λΆν°λ κ°μ₯ λ°μ μμλΆν° κ°μ₯ μμ μμκΉμ§μ μ μ₯λ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ§λ€. μ¦, λμ§Έ μ€λΆν° Nκ°μ μ€μλ νλμ μμμ λ΄κΈ΄ ν λ§ν μ μ λ³΄κ° μ£Όμ΄μ§λ€. κ° μ€μλ μμ κ°λ‘μ€μ λ€μ΄μλ ν λ§ν λ€μ μνκ° Mκ°μ μ μλ‘ μ£Όμ΄μ§λ€. μ μ 1μ μ΅μ ν λ§ν , μ μ 0 μ μ΅μ§ μμ ν λ§ν , μ μ -1μ ν λ§ν κ° λ€μ΄μμ§ μμ μΉΈμ λνλΈλ€. μ΄λ¬ν Nκ°μ μ€μ΄ Hλ² λ°λ³΅νμ¬ μ£Όμ΄μ§λ€.
ν λ§ν κ° νλ μ΄μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μΆλ ₯
μ¬λ¬λΆμ ν λ§ν κ° λͺ¨λ μ΅μ λκΉμ§ μ΅μ λ©°μΉ μ΄ κ±Έλ¦¬λμ§λ₯Ό κ³μ°ν΄μ μΆλ ₯ν΄μΌ νλ€. λ§μ½, μ μ₯λ λλΆν° λͺ¨λ ν λ§ν κ° μ΅μ΄μλ μνμ΄λ©΄ 0μ μΆλ ₯ν΄μΌ νκ³ , ν λ§ν κ° λͺ¨λ μ΅μ§λ λͺ»νλ μν©μ΄λ©΄ -1μ μΆλ ₯ν΄μΌ νλ€.
λ¬Έμ νμ΄
- my solution
import sys
from collections import deque
def bfs(graph, queue, visited, depth, n):
dx=[-1,1,0,0, n, -n] # μ,ν,μ’,μ°,μλμΈ΅,μμΈ΅
dy=[0,0,-1,1, 0, 0]
while queue:
temp=queue.popleft()
for i in range(6):
x=temp[0]+dx[i]
y=temp[1]+dy[i]
flag=True
if x>=0 and x<len(graph) and y>=0 and y<len(graph[0]): #ν λ§ν μ°½κ³ λ²μ μ
if visited[x][y]==0 : # μμ§ λ°©λ¬Ένμ§ μμλ€λ©΄
if dx[i]!=n and dx[i]!=-n: # μνμ’μ°==κ°μ μΈ΅
if temp[0]//n != x//n:
flag=False
if flag==True:
queue.append([x,y])
visited[x][y]=1
depth[x][y]=depth[temp[0]][temp[1]]+1
if __name__ =='__main__':
m,n,h=map(int ,sys.stdin.readline().split())
graph=[]
for i in range(n*h):
graph.append(list(map(int ,sys.stdin.readline().split())))
visited=[[0]*m for i in range(n*h)] # λ°©λ¬Έ μ¬λΆ
depth=[[0]*m for i in range(n*h)] # day
start=deque([])
for i in range(n*h):
for j in range(m):
if graph[i][j]==-1: # ν λ§ν κ° λ€μ΄μμ§ μμ
visited[i][j]=1
if visited[i][j]==0 and graph[i][j]==1: # λ°©λ¬Έx, μ΅μ ν λ§ν
start.append([i,j])
visited[i][j]=1
bfs(graph, start, visited, depth, n)
answer=-1
flag=False # λͺ¨λ μ΅μ§ λͺ»νλ κ²½μ° νλ³
for i in range(n*h):
if flag == True:
answer=-1
break
for j in range(m):
if visited[i][j]==0: # μ΅μ§ λͺ»ν ν λ§ν
flag=True
break
else: # μ΅μ λ μ§ κ΅¬νκΈ°
if answer<depth[i][j]:
answer=depth[i][j]
print(answer)
- bfs (ν λ§ν μ 보, queue , λ°©λ¬Έ μ¬λΆ list, day, n)
: dx, dy = μ, ν, μ’, μ°, μμΈ΅, μλμΈ΅ νμ
: queueκ° λΉ λκΉμ§ λ°λ³΅ -> μ μΌ μ²μ κ°μ pop -> μ, ν, μ’, μ°, μμΈ΅, μλμΈ΅μ νμΈνμ¬ ν λ§ν μμ λ²μμ μνλ©΄ -> μμ§ λ°©λ¬Ένμ§ μμλ€λ©΄ -> μνμ’μ°μΈ κ²½μ° κ°μ μΈ΅μ΄λΌλ©΄ queueμ μΆκ°, λ°©λ¬Έ o, μ΄λν μμΉμ depth = νμ¬ μμΉμ depth +1 - main
: m, n, h μ λ ₯
: ν λ§ν μ 보 μ λ ₯
: graph = ν λ§ν μ 보
visited = λ°©λ¬Έ μ¬λΆ
depth = μ΅μ μΌμ ꡬνκΈ° μν day μ μ₯
answer= μ΅μ λ μ§
: ν λ§ν κ° λ€μ΄μμ§ μμ κ³³μ bfs ν¨μμμ μν₯λ°μ§ μλλ‘ visitedλ₯Ό 1λ‘ μ€μ
: ν λ§ν μ 보 μ 체λ₯Ό νμνμ¬ μμ§ λ°©λ¬Ένμ§ μμμΌλ©° μ΅μ ν λ§ν λ₯Ό queueμ μΆκ° λ° λ°©λ¬Έ o
: bfs ν¨μ νΈμΆ
: λ°©λ¬Έ μ¬λΆ listλ₯Ό μ 체 νμνμ¬ 0μ΄ μ‘΄μ¬νλ©΄ = ν λ§ν κ° λͺ¨λ μ΅μ§ λͺ»νλ κ²½μ° -> -1 μΆλ ₯
0μ΄ μλ€λ©΄ depth μ€μμ κ°μ₯ ν° κ° μ°Ύμμ μΆλ ₯ = μ΅μ μΌμ
λ°λ‘ μ λ¬Έμ μμ ν΄κ²°νλ 7576 ν λ§ν λ¬Έμ μ λ§€μ° λΉμ·ν λ¬Έμ μλ€.
7576 μμλ ν λ§ν μ°½κ³ κ° ν μΈ΅μ΄μλ€λ©΄ 7569 μμλ ν λ§ν μ°½κ³ κ° μ¬λ¬ μΈ΅ μλ€λ μ μ΄ λ€λ₯Έ κ² λ§κ³ λ λκ°μλ€.
μνμ’μ°λ₯Ό νλ³ν λ κ°μ μΈ΅ ν λ§ν μ°½κ³ μΈμ§ νμΈνλ κ²λ§ μΆκ°νλ©΄ ν΄κ²°ν μ μμλ€.
β μ²μμ μ νλ Έλκ°?
μ¬λ¬ μΈ΅μ ν λ§ν μ°½κ³ κ° μκΈ° λλ¬Έμ μ, ν, μ’, μ°, μμΈ΅, μλμΈ΅μ νλ³ν λ κ³ λ €ν΄μΌ ν μ μ λμ³€κΈ° λλ¬Έμ΄λ€. μ, ν, μ’, μ° νλ³ μ λ€λ₯Έ μΈ΅μΈλ° λ¨μ§, ν λ§ν μ°½κ³ λ²μμ λ§λ€κ³ κ³μ°ν΄μ£Όλ©΄ λ€λ₯Έ κ²°κ³Όκ° λμ€κΈ° λλ¬Έμ΄λ€. κ·Έλ¬λ―λ‘ μ, ν, μ’, μ° νλ³ μ κ°μ μΈ΅μ ν λ§ν μ°½κ³ μΈμ§λ₯Ό νλ³νλ if λ¬Έμ λ£μ΄ ν΅κ³Όν μ μμλ€.
μκ°π€
λ°λ‘ μμ νμλ λ¬Έμ μ μ½λλ λΉμ·νμ¬ λ¨Έμ±νκΈ΄ νμ§λ§ κ·Έλλ ν΅κ³Όνλ€!
λλ²κΉ νλλΌ νλ€μλ€ π₯