https://www.acmicpc.net/problem/2468
2468๋ฒ: ์์ ์์ญ
์ฌ๋๋ฐฉ์ฌ์ฒญ์์๋ ๋ง์ ๋น๊ฐ ๋ด๋ฆฌ๋ ์ฅ๋ง์ฒ ์ ๋๋นํด์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ๊ณํํ๊ณ ์๋ค. ๋จผ์ ์ด๋ค ์ง์ญ์ ๋์ด ์ ๋ณด๋ฅผ ํ์ ํ๋ค. ๊ทธ ๋ค์์ ๊ทธ ์ง์ญ์ ๋ง์ ๋น๊ฐ ๋ด๋ ธ์ ๋ ๋ฌผ์ ์ ๊ธฐ์ง ์๋
www.acmicpc.net
ํ์ด ๋ฐฉ๋ฒ: BFS
๋น๋ ๋์ด 0๋ถํฐ ๊ทธ ์ง์ญ์ ์ต๊ณ ๋์ด๊น์ง ์ ๊ธฐ๊ฒ ํ ์ ์๋ค.
0๋ถํฐ ์ต๊ณ ๋์ด๊น์ง ๋ด๋ ธ์ ๋์ ์์ ์์ญ ๊ฐ์๋ฅผ ๊ฐ๊ฐ ๊ตฌํ์ฌ ๋ฆฌ์คํธ์ ๋ด์ ํ, ๋ฆฌ์คํธ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
0๋ถํฐ ์ต๊ณ ๋์ด๊น์ง ์์ ์์ญ ๊ฐ์ ๋ชจ๋ ๊ตฌํ๊ธฐ
maxH=max(map(max, graph)) #์
๋ ฅ๋ฐ์ ์ง์ญ์ ์ต๋ ๋์ด
result=[]
for rain in range(maxH):
visited = [[0 for j in range(n)] for i in range(n)]
cnt=0
for i in range(n):
for j in range(n):
if bfs(i,j,rain)==True:
cnt+=1
result.append(cnt)
-๋ฐฉ๋ฌธ์ฒดํฌ์ฉ ์ด์ฐจ์๋ฐฐ์ด(visited)์ ์๋ก ๋ง๋ค์ด์ค๋ค.
-๊ทธ๋ํ๋ฅผ ์ํํ๋ฉด์, ๋น๊ฐ ์ค์ ๋์ด(rain)๊น์ง ์ ๊ธฐ๊ฒ ํ์ ๋ ์์ ์์ญ(cnt)์ ๊ฐ์๋ฅผ bfs๋ก ๊ตฌํด์ค๋ค.
-๊ณ์ฐํ ์์ ์์ญ ๊ฐ์๋ฅผ ๋ฆฌ์คํธ(result)์ ๋ฃ๋๋ค.
bfs(row ์ขํ, col ์ขํ, ๋น๊ฐ๋ด๋ฆฌ๋๋์ด)
from collections import deque
dx=[-1,1,0,0]
dy=[0,0,-1,1]
def bfs(x,y,rain):
if visited[x][y]==1 or graph[x][y]<=rain: #๋ฐฉ๋ฌธํ์ ์์ผ๋ฉด
return False
visited[x][y]=1 #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
q = deque()
q.append((x,y))
while q:
a, b = q.popleft()
for i in range(4): #์ํ์ข์ฐ ์ฒดํฌ
nx = a + dx[i]
ny = b + dy[i]
#์์ญ์ ๋ฒ์ด๋์ง ์๊ณ ๋ฐฉ๋ฌธํ ์ ์ด ์๋ค๋ฉด
if 0<=nx<n and 0<=ny<n and visited[nx][ny]==0:
visited[nx][ny]=1 #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
#์์ ์์ญ์ ํด๋นํ๋ค๋ฉด ํด๋น ์ขํ๋ฅผ ํ์ ๋ฃ์ด์ฃผ๊ธฐ
if graph[nx][ny]>rain:
q.append((nx,ny))
#bfs๊ฐ ์ข
๋ฃ๋๋ฉด true๋ฅผ ๋ฆฌํด
return True
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DFS,BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]11724๋ฒ: ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2023.02.26 |
---|---|
[๋ฐฑ์ค]7576๋ฒ: ํ ๋งํ (0) | 2023.02.25 |
[๋ฐฑ์ค]10026๋ฒ: ์ ๋ก์์ฝ (0) | 2023.02.24 |
[๋ฐฑ์ค]4963๋ฒ: ์ฌ์ ๊ฐ์ (0) | 2023.02.23 |
[์ด์ฝํ ]๋ฏธ๋ก ํ์ถ / [๋ฐฑ์ค]2178๋ฒ: ๋ฏธ๋ก ํ์ (0) | 2023.02.23 |