๋ฌธ์ (์ถ์ฒ: 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 ๋ฌธ์ ๋ฃ์ด ํต๊ณผํ ์ ์์๋ค.
์๊ฐ๐ค
๋ฐ๋ก ์์ ํ์๋ ๋ฌธ์ ์ ์ฝ๋๋ ๋น์ทํ์ฌ ๋จธ์ฑํ๊ธด ํ์ง๋ง ๊ทธ๋๋ ํต๊ณผํ๋ค!
๋๋ฒ๊น ํ๋๋ผ ํ๋ค์๋ค ๐ฅ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1068_ํธ๋ฆฌ (0) | 2022.03.25 |
---|---|
[Baekjoon] 3190_๋ฑ (0) | 2022.03.23 |
[Baekjoon] 7576_ํ ๋งํ (0) | 2022.03.21 |
[Baekjoon] 10026_์ ๋ก์์ฝ (0) | 2022.03.20 |
[Baekjoon] 4889_์์ ์ ์ธ ๋ฌธ์์ด (0) | 2022.03.18 |