๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/1829
์์ญ์ ์์ ๊ฐ์ฅ ํฐ ์์ญ์ ๋์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ํ์ด
ํํ ๋ณผ ์ ์๋ bfs ๋ฌธ์ ์ ์ ์ฌํ๋ค.
que์ ์ขํ๋ฅผ ๋ฃ๊ณ que๊ฐ ๋น ๋๊น์ง move๋ฅผ ์ด์ฉํด ์ฃผ์ ์ขํ(์,ํ,์ข,์ฐ)๋ฅผ ํ์ํ๊ณ , ๋์ผํ ๊ฐ์ ์ง๋ ์ขํ๋ que์ ์ถ๊ฐํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํ์์ ์งํํ๋ค. ํด๋น ์ขํ๋ฅผ ๋ฐฉ๋ฌธํ๋ค๋ฉด check ๊ฐ์ ๋ฐ๊ฟ์ฃผ์ด ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํด์ค๋ค.
bfs๋ฅผ ์๋ก ์คํํ ๋ ๋ง๋ค ์๋ก์ด ์์ญ์ ํ์ํ๋ ๊ฒ์ด๋ฏ๋ก ์์ญ ๊ฐ(answer[0])์ 1์ ๋ํด์ฃผ๊ณ ,
bfs๋ฅผ return ํ๊ธฐ ์ ์ ๊ธฐ์กด์ ๊ฐ์ฅ ํฐ ์์ญ ๊ฐ(answer[1])๊ณผ ๋น๊ตํ์ฌ ๊ฐ์ ๊ฐฑ์ ํด์ค๋ค.
์ฝ๋
import sys
from collections import deque
def bfs(x,y,answer):
que=[(x,y)]
temp=picture[x][y]
move=[[1,0],[-1,0],[0,1],[0,-1]]
count=1
check[x][y] =1
while que:
x,y=que.pop()
for i in move:
dx=x+i[0]
dy=y+i[1]
if 0<=dx<m and 0<=dy<n:
if temp==picture[dx][dy] and not check[dx][dy]: ##์์ด ๊ฐ์ผ๋ฉด์ ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ
count+=1
check[dx][dy]=1
que.append((dx,dy))
answer[0]+=1
answer[1]=max(answer[1],count)
return
def solution(m, n, picture):
answer = [0,0]
for i in range(m):
for j in range(n):
if check[i][j]==0 and picture[i][j]!=0:
bfs(i,j,answer) #์๋ก์ด ์์ญ ํ์
return answer
if __name__ == "__main__":
input = sys.stdin.readline
m, n = map(int, input().split())
picture = [list(map(int, input().split())) for _ in range(m)]
check = [[0] * n for _ in range(m)]
number_of_area, max_size_of_one_area = solution(m, n, picture)
print(number_of_area, max_size_of_one_area)
'๐ปAlgorithm > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/๋ฐฑ์ค] 2160 ๊ทธ๋ฆผ๋น๊ต - ํ์ด์ฌ (0) | 2022.05.11 |
---|---|
[๋ฐฑ์ค/BOJ] 1449 ์๋ฆฌ๊ณต ํญ์น - ํ์ด์ฌ (0) | 2022.05.08 |
[BOJ/๋ฐฑ์ค] 9024 ๋ ์์ ํฉ - ํ์ด์ฌ (0) | 2021.11.01 |
[BOJ/๋ฐฑ์ค] 20041 Escaping - ์๋ฐ,ํ์ด์ฌ (2) | 2021.10.08 |
[BOJ/๋ฐฑ์ค] 20047 ๋์ ์ฎ๊ธฐ๊ธฐ - ์๋ฐ (0) | 2021.10.05 |