1+ """"
2+ ์ค๋ฒ1
3+ https://www.acmicpc.net/problem/2468
4+ # ์กฐ๊ฑด :
5+ (1) ๋ฌผ์ ์ ๊ธฐ์ง ์์ ๊ตฌ์ญ ์์น ๊ตฌํ๊ธฐ
6+ (2) ์ ์ ๊ธด ๊ตฌ์ญ๋ค์ ๊ตฐ์ง ๊ฐ์ ์ฐพ๊ธฐ
7+ - ์ํ์ข์ฐ๋ก ์ฐ๊ฒฐ๋ ๊ตฌ์ญ = 1 ๊ตฐ์ง
8+ # ์ ํ: ๋
ธ๋ ํ์ -> BFS/DFS
9+ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค์ด ์ด๋ฃจ๋ ๊ตฐ์ง ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์
10+
11+
12+ """
13+ import sys
14+ from collections import deque
15+ input = sys .stdin .readline
16+
17+ n = int (input ())
18+ field = []
19+ limit_list = set ()
20+ limit_list .add (0 )
21+ # 1. ๋ฌผ์ ์ ๊น, ์์กด ๊ตฌ์ญ์ผ๋ก ๊ตฌ๋ถํ field ๋ง๋ค๊ธฐ
22+ for i in range (n ):
23+ tmp = list (map (int ,input ().split ()))
24+ for j in range (n ) :
25+ # limit_list ์์งํ๊ธฐ = ๋
ธ๋์ ๋์ด ๊ฐ ์ข
๋ฅ
26+ limit_list .add (tmp [j ])
27+ field .append (tmp )
28+ # print(f"field - {limit_list}")
29+
30+
31+ # ์ข
๋ฅ๋ณ limit์ ๋ฐ๋ผ ์ง๋ ๋์ด๊ฐ limit ์ดํ์ผ ๊ฒฝ์ฐ ์นจ์๋๋ ์ง์ญ, ์์กด ์ง์ญ ๋ช
์
32+ # board : ์์กด ์ฌ๋ถ + ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์ธ flag ์ญํ
33+ def init_board (limit ) :
34+ # ๊ฐ limit ๋ณ๋ก ์นจ์๋๋ ์ง์ญ์ ํ์ธํ๊ธฐ
35+ board = [[0 for _ in range (n )] for k in range (n ) ]
36+ saved_point = []
37+ # ์นจ์ ์ง์ญ ๋งต ์
๋ฐ์ดํธํ๊ธฐ
38+ for i in range (n ):
39+ for k in range (n ):
40+ if field [i ][k ] <= limit : # ์นจ์ ์ง์ญ
41+ board [i ][k ] = - 1
42+ else :
43+ # ์์กด ์ง์ญ
44+ saved_point .append ([i ,k ])
45+ return board ,saved_point
46+
47+ # 2. ์์กด ๊ตฌ์ญ๋ค์ ๊ตฐ์ง ๊ฐ์ ๊ตฌํ๊ธฐ
48+ #์ํ์ข์ฐ
49+ dy = [- 1 ,1 ,0 ,0 ]
50+ dx = [0 ,0 ,- 1 ,1 ]
51+ def bfs (sy ,sx , field ):
52+ # (1)์์์ ์ ์
53+ q = deque ()
54+ q .append ([sy ,sx ])
55+ field [sy ][sx ] = 1 # ๋ฐฉ๋ฌธ ๋ฑ๋ก
56+ # (2)์ธ์ ํ ๋
ธ๋
57+ while q :
58+ cy ,cx = q .popleft ()
59+ for dw in range (4 ):
60+ ny ,nx = cy + dy [dw ] , cx + dx [dw ]
61+ # 2-1 ํ๋ ๋ฒ์์์ ๋ฒ์ด๋๋์ง ํ์ธ
62+ # 2-2๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์ธ
63+ if 0 <= ny < n and 0 <= nx < n and field [ny ][nx ] == 0 : # ๋ฐฉ๋ฌธ ์ํ์ผ๋ฉด ์
๋ฐ์ดํธ
64+ q .append ([ny ,nx ])
65+ field [ny ][nx ] = 1
66+
67+ return 0
68+ # main ํจ์
69+ max_cnt = 0
70+ for limit in limit_list : #limit ์ 1๊ฐ์ฉ ์กฐํฉํด๋ด
71+ board ,saved_point = init_board (limit )
72+ # print(f"##{limit} : {saved_point}")
73+ cnt = 0
74+ # ์์กด ๊ตฌ์ญ์์ ํ์ธ
75+ for y ,x in saved_point :
76+ if board [y ][x ] == 0 :#๋ฐฉ๋ฌธ ์ํ์ผ๋ฉด -> bfs ํ์ ์งํ
77+ bfs (y ,x , board )
78+ cnt += 1
79+
80+ max_cnt = max (max_cnt , cnt )
81+ print (max_cnt )
0 commit comments