๐ ๋ฌธ์
N×M์ธ ๋ฐฐ์ด์์ ๋ชจ์์ ์ฐพ์ผ๋ ค๊ณ ํ๋ค. ๋ฐฐ์ด์ ๊ฐ ์นธ์๋ 0๊ณผ 1 ์ค์ ํ๋๊ฐ ๋ค์ด์๋ค. ๋ ์นธ์ด ์๋ก ๋ณ์ ๊ณต์ ํ ๋, ๋ ์นธ์ ์ธ์ ํ๋ค๊ณ ํ๋ค.
1์ด ๋ค์ด ์๋ ์ธ์ ํ ์นธ๋ผ๋ฆฌ ์ฐ๊ฒฐํ์ ๋, ๊ฐ๊ฐ์ ์ฐ๊ฒฐ ์์๋ฅผ ๋ชจ์์ด๋ผ๊ณ ๋ถ๋ฅด์. ๋ชจ์์ ํฌ๊ธฐ๋ ๋ชจ์์ ํฌํจ๋์ด ์๋ 1์ ๊ฐ์์ด๋ค.
๋ฐฐ์ด์ ์นธ ํ๋์ ๋ค์ด์๋ ์๋ฅผ ๋ณ๊ฒฝํด์ ๋ง๋ค ์ ์๋ ๋ชจ์์ ์ต๋ ํฌ๊ธฐ๋ฅผ ๊ตฌํด๋ณด์.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฐฐ์ด์ ํฌ๊ธฐ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๋ฐฐ์ด์ ๋ค์ด์๋ ์๊ฐ ์ฃผ์ด์ง๋ค.
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ ํ๋๋ฅผ ๋ณ๊ฒฝํด์ ๋ง๋ค ์ ์๋ ๋ชจ์์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ค.
๐ซ์ ํ
$ 2 <= N, M <= 1000 $
0๊ณผ 1์ ๊ฐฏ์๋ ํ๋ ์ด์์ด๋ค.
๐ ๋ฌธ์ ํ์ด
๋ฑ ๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ์ด๋ป๊ฒ ํ์ด์ผ ํ ์ง ๊ฐ์ด์๋ค.
๋ฐฉ๋ฌธ์ฒดํฌ ๋ฐฐ์ด์ ํ์ฌ ์๊ธฐ๊ฐ ์ํ ๊ทธ๋ฃน์ ๋ด์ ๋๋ค ๊ทธ ๊ทธ๋ฃน์ 1์ ๊ฐฏ์๋ฅผ ๋ฐ๋ก dict์ ๋ด์ ๋๋๋ค. ์ฆ ์ด์ค๋ฐ๋ณต๋ฌธ์ ํตํด ๊ทธ๋ํ๋ฅผ ๋๋ฉด์ 1์ด๋ผ๋ฉด BFS๋ฅผ ๋๋ ค ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ฃผ์๋ค.
๊ทธ๋ ๊ฒ ๋ฐฉ๋ฌธ ๋ฐฐ์ด์ ๊ฐ๊ฐ ์ํ ๊ทธ๋ฃธ์ ๋ด์๋์๋ค๋ฉด, ์ด์ ๋ค์ ๋ฐ๋ณต๋ฌธ์ ๋์์ 0์ธ ๊ณณ์ ์ฐพ๋๋ค. ๋ง์ฝ 0์ด๋ผ๋ฉด ์ํ์ข์ฐ์ ์ด๋ค ๊ทธ๋ฃน์ด ์๋์ง ์ฒดํฌํด์ค๋ค. ์ํ์ข์ฐ์ ๊ฐ์ ๊ทธ๋ฃน์ด ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ ๊ฐ์ ๊ทธ๋ฃน์ ๋ค์๋ ํฌํจ ์๋๊ฒ ํ๊ธฐ ์ํด set ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์๋ค.
๊ทธ๋ ๊ฒ ์ํ์ข์ฐ์ ์๋ ๊ทธ๋ฃน์ ํ์ ํ์ผ๋ฉด dict์ ์ ์ฅํด๋์ ๊ฐ๊ฐ 1์ ํฌํจํ๊ณ ์๋ ๊ฐฏ์๋ฅผ ๋ถ๋ฌ์ ๋ํด์ค๋ค ์ต๋๊ฐ์ ์ถ๋ ฅํด์ฃผ์๋ค.
๐ป ์ฝ๋ 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | from collections import deque import sys input= sys.stdin.readline # 1๊ฐฏ์ ๊ฐ๊ฐ ๋ํ์ ์นด์ดํธ # ๋ง์ง๋ง์๋ 0๋ง ์ฐพ์ ๋ค๋๋ฉด์ ์ํ์ข์ฐ 1์ ์กฐ๊ฐ ๊ฐฏ์ ๋ํจ dx = [1,0,-1,0] dy = [0,1,0,-1] n,m = map(int,input().split()) graph = [list(map(int,input().split())) for _ in range(n)] visited = [[0]*(m) for _ in range(n)] dic = dict() # 1์ด์ ๊ฐฏ์๋ฅผ ์ฒดํฌํ๊ธฐ ์ํ ํ์ def bfs(a: int,b: int,c: int,pos: int)-> int: queue = deque() queue.append([a,b,c]) visited[a][b] = pos cnt_tmp = 1 while queue: x,y,cnt = queue.popleft() for i in range(4): nx = x+dx[i] ny = y+dy[i] if nx < 0 or ny < 0 or nx >= n or ny >= m: continue if visited[nx][ny] == 0 and graph[nx][ny] == 1: cnt_tmp += 1 queue.append([nx,ny,cnt+1]) visited[nx][ny] = pos #print('last', cnt_tmp) # 1์ ๋ฌถ์ ๊ฐฏ์ return cnt_tmp # ๊ฐ๊ฐ์ 1๋ญํฑ์ด key๊ฐ์ idx๋ก ๋์๋ค. idx = 1 for i in range(n): for j in range(m): # 1์ด๊ณ , ์์ง ๋ฐฉ๋ฌธ์ํ๋ค๋ฉด if graph[i][j] == 1 and visited[i][j] == 0: tmp = bfs(i,j,1,idx) # 1์ ๋ญํฑ์ด ๊ฐฏ์ dic[idx] = tmp # dict์ ์ ์ฅ idx += 1 tot = [] # ๋ค์ ๋ฐ๋ณต๋ฌธ ๋์ 0์ ์ฐพ๋๋ค. for i in range(n): for j in range(m): if graph[i][j] == 0: side =set() # ์ํ์ข์ฐ 1๋ญํฑ์ด ํค๊ฐ์ side์ for k in range(4): nx = i+dx[k] ny = j+dy[k] if nx < 0 or ny < 0 or nx >= n or ny >= m: continue if visited[nx][ny] != 0: side.add(visited[nx][ny]) # tot๋ ๋ชจ๋ 0์ ์ํ์ข์ฐ list if side not in tot: tot.append(side) #print(tot) result = [] for ans in tot: for_sum = 0 ans = list(ans) # ํค๊ฐ ๋ถ๋ฌ์ 0์ 1๋ก ๋ฐ๊พธ๋ฉด ๋ช์ธ์ง ํ์ธ for i in ans: for_sum += dic[i] #print(for_sum) result.append(for_sum) print(max(result)+1) | cs |
์์ ์ฝ๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์๋ค.
์ด์ค๋ฐ๋ณต๋ฌธ์ ๋๋ฒ์ด๋ ๋์๊ณ , (1์ ์ฐพ๊ธฐ ์ํด, 0์ ์ฐพ๊ธฐ ์ํด), ์ฐ์ฐ์ ๋๋ฌด ์ธ๋ถํ ํ์ฌ ๋ฐ๋ณต๋ฌธ์ ์ฌ๋ฌ ์ฐจ๋ก ๋๊ฒํ์๋ค.
๊ทธ๋์ 1์ ์ฐพ๊ธฐ ์ํด ์ด์ค ๋ฐ๋ณต๋ฌธ์ ๋๋ 0์ ์์น๋ stk๋ผ๋ list์ ์ ์ฅํด๋๋ค ๋์ค์ ๋ค์ ์ด์ค๋ฐ๋ณต๋ฌธ์ ๋์ง ์๊ฒ ์ต์ ํ ํ์๊ณ , ๋ ์ธ๋ถํ๋ ๊ฒ๋ค์ ํ๋ฒ์ ์ฒ๋ฆฌํ์๋ค.
๐ป ์ฝ๋ 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | from collections import deque import sys input= sys.stdin.readline dx = [1,0,-1,0] dy = [0,1,0,-1] n,m = map(int,input().split()) graph = [list(map(int,input().split())) for _ in range(n)] visited = [[0]*(m) for _ in range(n)] dic = dict() # 1๊ฐฏ์ ๊ฐ๊ฐ ๋ํ์ ์นด์ดํธ # ๋ง์ง๋ง์๋ 0๋ง ์ฐพ์ ๋ค๋๋ฉด์ ์ํ์ข์ฐ 1์ ์กฐ๊ฐ ๊ฐฏ์ ๋ํจ def bfs(a,b,c,pos): queue = deque() queue.append([a,b,c]) visited[a][b] = pos cnt_tmp = 1 while queue: x,y,cnt = queue.popleft() for i in range(4): nx = x+dx[i] ny = y+dy[i] if nx < 0 or ny < 0 or nx >= n or ny >= m: continue if visited[nx][ny] == 0 and graph[nx][ny] == 1: cnt_tmp += 1 queue.append([nx,ny,cnt+1]) visited[nx][ny] = pos return cnt_tmp idx = 1 stk = [] for i in range(n): for j in range(m): if graph[i][j] == 1 and visited[i][j] == 0: dic[idx] = bfs(i,j,1,idx) idx += 1 # 0์ด๋ฉด stk์ ์ ์ฅ elif graph[i][j] == 0: stk.append([i,j]) res = 0 for i,j in stk: four = 0 # ์ํ์ข์ฐ 1์ ๊ฐฏ์ ํฉ pre = [] # ๊ฐ์ ์ฐ์ฐ ๋๋ฒ ๋ฐฉ์งํ๊ธฐ for k in range(4): nx = i+dx[k] ny = j+dy[k] if nx < 0 or ny < 0 or nx >= n or ny >= m: continue level = visited[nx][ny] if level!=0 and level not in pre: four += dic[level] pre.append(level) #print('four', four) if res < four+1: res = four+1 print(res) | cs |
์ด๋ ๊ฒ ์ต์ ํํ๋ ํต๊ณผํ์๋ค!!ใ
๐ญ ์ํ์ฐฉ์ค
๐ ๋ฌธ์ ๋งํฌ ๋ชจ์ ๋ง๋ค๊ธฐ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 14621๋ฒ: ๋๋ง ์๋๋ ์ฐ์ - ํ์ด์ฌ (1) | 2022.10.08 |
---|---|
[๋ฐฑ์ค] 2887๋ฒ: ํ์ฑ ํฐ๋ - ํ์ด์ฌ (1) | 2022.10.05 |
[๋ฐฑ์ค] 11780๋ฒ: ํ๋ก์ด๋ 2 - Python (0) | 2022.09.22 |
[๋ฐฑ์ค] 14567๋ฒ: ์ ์๊ณผ๋ชฉ (Prerequisite) - ํ์ด์ฌ (0) | 2022.09.18 |
[๋ฐฑ์ค] 5427๋ฒ: ๋ถ - ํ์ด์ฌ (0) | 2022.09.11 |