1926๋ฒ - ๊ทธ๋ฆผ
1๋ก ๊ตฌ๋ณ๋ ๊ทธ๋ฆผ์ ๊ฐ์์ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
BFS๋ฅผ ํ์ฉํ๋ฉด ํ์ด๋ผ ์ ์์ต๋๋ค.
N,M = map(int,input().split())
graph = []
que = deque()
for _ in range(N):
graph.append(list(map(int,input().split())))
๋จผ์ ๊ฐ๋ก ์ธ๋ก์ BFS ์ฌ์ฉ์ ์ํ ํ ์ ์ธ ๋ฐ ๊ทธ๋ํ์ ํฌ๊ธฐ ๋ฑ์ ๋ฐ์๋ด๊ฒ ์ต๋๋ค.
ans_1,ans_2 = 0,0
for i in range(N):
for j in range(M):
if graph[i][j] == 1:
a,b = bfs(i,j)
ans_1 += a
if b>ans_2:
ans_2 = b
์ ๋ต์ ๋ฐ์ ๋ณ์ 1,2๋ฅผ ์ ์ธํ๊ณ bfs๋ฅผ ๋๋ ค ๋ณ์1์ ๊ทธ๋ฆผ์ ๊ฐ์์ด๋ฏ๋ก ๋ง์ ๋ฐฉ์์ผ๋ก, ๋ณ์2๋ ๊ทธ๋ฆผ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ๋ด์๋ผ ๊ฒ์ด๋ฏ๋ก maxํจ์๋ฅผ ์ง์ ํ๋ ํ์์ผ๋ก ๋ฐ์์ค์๋ค.
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]
def bfs(x,y):
max_draw = 0
sum = 0
boolean = False
que.append([x,y])
while que:
ํ๋ฅผ ์ ์ธํ๊ณ BFSํจ์๋ฅผ ์์ฑํฉ๋๋ค.
x,y = que.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if nx<0 or ny<0 or nx>=N or ny>=M:
continue
์ํ์ข์ฐ 4๋ฐฉํฅ ํ์์ ์ค์ํด์ฃผ๊ณ
if graph[nx][ny] == 1:
max_draw += 1
que.append([nx,ny])
graph[nx][ny] = 2
boolean = True
1์ด ์กด์ฌํ๋ค๋ฉด ๊ทธ๋ฆผ์ด ์๋ค๋ ๊ฒ์ด๋ฏ๋ก 2๋ก ๋ฐ๊ฟ์ฃผ๊ณ ๋ค์ ํ์ ํ๋ณด์ ์ถ๊ฐํด์ค์๋ค. boolean๊ฐ์ ๊ฒฝ์ฐ๋ ํ์์ ํ๋์ง ์ํ๋์ง ๊ตฌ๋ถํ๊ธฐ ์ํด์ ์์ฑํ์๋๋ค.
sum += 1
if boolean == False:
max_draw += 1
return sum,max_draw
๋ชจ๋ ํ์์ด ๋๋ฌ์ผ๋ฉด ๊ทธ ์ฃผ๋ณ ๊ทธ๋ฆผ์ ๋ค ํ์ํ ๊ฒ์ด๋ฏ๋ก sum๊ฐ์ 1 ๋์ฌ์ฃผ๊ณ boolean์ด ํ์์ ํ๋ฒ๋ ํ์ ์ด ์๋ False๊ฐ์ด๋ผ๋ฉด ๊ทธ๋ฆผ์ด ๋ฑ ํ๋๋ง ์กด์ฌํ๋ฏ๋ก max_draw์ 1์ ๋ํด์ค์๋ค.
print(ans_1)
#๊ทธ๋ฆผ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ
if ans_1 == 0:
print(0)
else:
print(ans_2)
๋ง์ง๋ง์ผ๋ก ๊ทธ๋ฆผ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด์ ์ถ๋ ฅํ๋ฉด ์ ์์ ์ผ๋ก ๋ต์ ๋์ถํด๋ผ ์ ์์ต๋๋ค.
1743๋ฒ - ์์๋ฌผ ํผํ๊ธฐ
๋น์ทํ ์ ํ์ ๋ฌธ์ ์
๋๋ค.
๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด ์์๋ฌผ์ด ๊ฐ์ฅ ๋ง์ด ๋ญ์ณ์๋ ๋ถ์์ ์์๋ฌผ์ด ๋ช๊ฐ๋ ์๋์ง ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
N,M,K = map(int,input().split())
graph = [[0]*M for _ in range(N)]
visited = [[0]*M for _ in range(N)]
que = deque()
for _ in range(K):
a,b = map(int,input().split())
graph[a-1][b-1] = 1
BFS์กฐ์ฌ๋ฅผ ์ํด์ ๊ทธ๋ํ์ ๋ฐฉ๋ฌธ์ฌ๋ถ ๋ฑ์ ์ ์ธํด์ฃผ๊ฒ ์ต๋๋ค.
max = 0
for i in range(N):
for j in range(M):
if graph[i][j] == 1:
a = bfs(i,j)
if max < a:
max = a
๊ทธ๋ํ๋ฅผ ๋ค ์ดํด๋ด์ ๋ง์ฝ ํด๋น ์๋ฆฌ์ ์์๋ฌผ์ด ์กด์ฌํ๋ค๋ฉด BFS ํ์์ ๋๋ ค์ค๊ฒ๋๋ค.
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]
def bfs(x,y):
sum = 0
visited[x][y] = 1
que.append([x,y])
๋ฐฉ๋ฌธํ๋ค๊ณ ๊ธฐ์ฌํด์ฃผ๊ณ que๋ฅผ ํ๋ ๋ฝ์์ ํ์์ ์์ํ๊ฒ ์ต๋๋ค.
while que:
x,y = que.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if nx<0 or ny<0 or nx>=N or ny>=M:
continue
4๋ฐฉํฅ ํ์์ ๋๋ฆฌ๊ณ
if graph[nx][ny] == 1 and not visited[nx][ny]:
visited[nx][ny] = 1
sum += 1
que.append([nx,ny])
๋ฐฉ๋ฌธ์ํ๊ณ ์์๋ฌผ์ด ์๋ ๋ถ์๋ผ๋ฉด ๋ฐฉ๋ฌธํ๋ค๊ณ ํ๊ธฐํด์ฃผ๊ณ sum๊ฐ์ 1 ๋์ฌ์ค ๋ค์ ๊ทธ๋ค์ ํ์ํ๋ณด์ ์ฌ๋ ค๋ก์๋ค.
return sum
sum๊ฐ์ return ํด์ฃผ๊ณ
print(max+1)
์ด์งํผ ์ฒซ ์กฐ์ฌ๋ ์์๋ฌผ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํ๊ณ ๋ฐฉ๋ฌธํ๊ณณ์ ๋ค์ ๋ฐฉ๋ฌธ์ ์ํ๋๊น ์ฒซ ์กฐ์ฌ ๊ตฌ์ญ+์์๋ฌผ์ด ๊ฐ์ฅ ๋ง์ด ๋ญ์ณ์๋ ๊ณณ ํ์ ๋ ๊ฒ์ ํฉํด์ฃผ๋ฉด ๋ต์ด ๋์ต๋๋ค.