ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
์ด์ ์ ๋ค๋ฃฌ ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ, ์ฌ์ ๊ฐ์์ ์ ์ฌํ ๋ฌธ์ ์ด๋ค. ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด ๋น๊ฐ ์ค๋ ์์ ๋ฐ๋ผ ์นจ์๋๋ ์ง์ญ์ด ๋ฌ๋ผ์ง๋ฉฐ, ๊ทธ๋ก ์ธํด ์์ ์์ญ์ ๊ฐ์๊ฐ ๋ณ๋๋๋ค๋ ๊ฒ์ด๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ BFS๋ก ํ์์ ํ๋, ๋์ด๊ฐ ๊ฐ์ฅ ๋ฎ์ ๊ณณ์ด ์นจ์๋ ๋๋ถํฐ, ๊ฐ์ฅ ๋์ ๊ณณ์ด ์นจ์๋ ๋๊น์ง BFS๋ฅผ ํ์ํ์ฌ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํ๊ณ ์ต๋ ๊ฐ์ ๋ฐํํ๋ฉด ๋๋ค.
-
3์ค ๋ฐ๋ณต๋ฌธ์ ํตํด BFS๋ฅผ ํธ์ถํ๋ค.
- ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ : ๊ฐ์ฅ ๋ฎ์ ๋์ด ~ ๊ฐ์ฅ ๋์ ๋์ด
- ๋ ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ : ํ์ ์ ํํ๋ i
-
์ธ ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ : ์ด์ ์ ํํ๋ j
- BFS๋ฅผ ํธ์ถํ ๋, ํ์ฌ ์นจ์๋๋ ๋์ด๋ณด๋ค ํฐ ๊ฒ์ ํ์ํ๋ค.
์์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ ์์ ์ ๋ ฅ์์ ๋์ด 2๊ฐ ์นจ์๋ ๊ฒฝ์ฐ์ด๋ค. ์นจ์๋๋ ๊ณณ ์ด์ธ์ ๋๋จธ์ง ๋ถ๋ถ์ ํ ์์ญ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ฏ๋ก, ๋์ด 2๊ฐ ์นจ์๋ ๋ ์์ ์์ญ์ ์๋ 1๊ฐ์ด๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y, height):
return 0 <= x < n and 0 <= y < n and graph[x][y] > height
def bfs(start, height):
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
q = deque([start])
while q:
x, y = q.popleft()
for dx, dy in dirs:
next_x, next_y = x + dx, y + dy
if visitable(next_x, next_y, height) and not visited[next_x][next_y]:
q.append([next_x, next_y])
visited[next_x][next_y] = True
return 1
if __name__ == "__main__":
n = int(stdin.readline())
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
answer = 1
for cur_height in range(min(min(graph)), max(max(graph))):
cnt = 0
visited = [[False] * n for _ in range(n)]
for i in range(n):
for j in range(n):
if not visited[i][j] and graph[i][j] > cur_height:
cnt += bfs([i, j], cur_height)
answer = max(answer, cnt)
print(answer)
ํ ์คํธ ์ผ์ด์ค ์ค์ ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์ผ์ด์ค(์ฑ์ ์ค ์ฝ 95%์ฏค)์ธ [[1, 1], [1, 1]]์ ์ ๋ ฅํ๋ฉด 1์ ๋ฐํํ์ฌ์ผ ํ๋๋ฐ, 0์ ๋ฐํํ๋ค. ์ฆ ๋ชจ๋ ๋์ด๊ฐ ๊ฐ์ ๊ฒฝ์ฐ, BFS๋ฅผ ํธ์ถํ์ง ์๊ณ ์ต์ ์์ ์์ญ์ 1์ด๊ธฐ์ answer๋ฅผ 1๋ก ์ด๊ธฐํํ์ฌ ์ด๋ฅผ ํด๊ฒฐํ์๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1931 ํ์์ค๋ฐฐ์ (0) | 2020.09.05 |
---|---|
๋ฐฑ์ค: 1520 ๋ด๋ฆฌ๋ง๊ธธ (2) | 2020.09.01 |
๋ฐฑ์ค: 10942 ํฐ๋ฆฐ๋๋กฌ? (0) | 2020.08.30 |
๋ฐฑ์ค: 15486 ํด์ฌ 2 (0) | 2020.08.29 |
๋ฐฑ์ค: 5557 1ํ๋ (0) | 2020.08.29 |