๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1926 ๊ทธ๋ฆผ (ํŒŒ์ด์ฌ/python)

by chjcoder 2023. 6. 17.

๐ŸŽˆ๋ฌธ์ œ

https://www.acmicpc.net/problem/1926

 

๐ŸŽ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜?

1. ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์†๋„ ์ž์ฒด๋Š” bfs๊ฐ€ ๋น ๋ฅด๋‹ค.

2. ๊ทธ๋ž˜ํ”„๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๊ฒฝ๋กœ์˜ ํŠน์ง•์„ ์ €์žฅํ•ด์•ผ ํ•  ๊ฒฝ์šฐ๋Š” dfs๊ฐ€ ์œ ๋ฆฌํ•˜๋‹ค.

3. ๊ทธ๋ž˜ํ”„๊ฐ€ ํฌ์ง€ ์•Š๊ณ  ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” bfs๊ฐ€ ์œ ๋ฆฌํ•˜๋‹ค.

4. ์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ๊ทธ๋ž˜ํ”„๊ฐ€ ํฌ์ง€ ์•Š์œผ๋ฏ€๋กœ bfs๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •.

 

๐Ÿ’ป์ฝ”๋“œ

from collections import deque

# ๊ทธ๋ฆผ ๋„“์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” bfsํ•จ์ˆ˜
def bfs(x,y):
    deq = deque()   # ํ ์„ค์ •
    deq.append([x,y])   # ํ˜„์žฌ ์ขŒํ‘œ ํ์— ์‚ฝ์ž…
    count_area = 1  # ํ˜„์žฌ ์ขŒํ‘œ ๋ฐฉ๋ฌธ ํ›„ ํ์— ์‚ฝ์ž…ํ–ˆ์œผ๋ฏ€๋กœ 1๋ถ€ํ„ฐ
    graph[x][y] = 0 # ํ˜„์žฌ ์ขŒํ‘œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
    # ์ƒํ•˜์ขŒ์šฐ ์ขŒํ‘œ
    dx = [0,0,-1,1]
    dy = [1,-1,0,0]
    while deq:
        x,y = deq.popleft() # ํ์—์„œ ์›์†Œ๋ฅผ ๋นผ๋‚ด๋ฉฐ ํƒ์ƒ‰ ์‹œ์ž‘
        for i in range(4):  # ๋นผ๋‚ธ ์›์†Œ ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰
            nx = x + dx[i]
            ny = y + dy[i]
            # ๋„ํ™”์ง€ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ ๋ฌด์‹œ
            if nx < 0 or nx > (n-1) or ny < 0 or ny > (m-1):
                continue
            if graph[nx][ny] == 1:
                graph[nx][ny] = 0
                count_area += 1 # ๊ทธ๋ฆผ ๋„“์ด +1
                deq.append([nx,ny]) # ์ขŒํ‘œ ํ์— ์ €์žฅ

    return count_area

# n: ์„ธ๋กœ(x), m: ๊ฐ€๋กœ(y)
n,m = map(int,input().split())
# ๋„ํ™”์ง€
graph = []
for i in range(n):
    graph.append(list(map(int,input().split())))
# ๊ทธ๋ฆผ ํฌ๊ธฐ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ
area_lst = []

# ํƒ์ƒ‰ ์‹œ์ž‘
for i in range(n):
    for j in range(m):
        if graph[i][j]: # ํ•ด๋‹น ์นธ์˜ ๊ฐ’์ด 1์ด๋ฉด
            area_lst.append(bfs(i,j))   # bfs ํƒ์ƒ‰์œผ๋กœ ์•Œ์•„๋‚ธ ๊ทธ๋ฆผ ๋„“์ด area_lst์— ์‚ฝ์ž…

cnt = len(area_lst) # ๊ทธ๋ฆผ ๊ฐœ์ˆ˜
print(cnt)
if cnt == 0:
    print(0)
else:
    print(max(area_lst))

 

๐ŸŽ„์ฝ”๋“œ ์„ค๋ช…

๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ€์žฅ ๋„“์€ ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

1. ๋„ํ™”์ง€ ํฌ๊ธฐ n,m์„ ์ž…๋ ฅ๋ฐ›๊ณ , n๊ณผ m์ด ์„ธ๋กœ์— ํ•ด๋‹นํ•˜๋Š”์ง€, ๊ฐ€๋กœ์— ํ•ด๋‹นํ•˜๋Š”์ง€๋ฅผ ๊ผญ ์ ์–ด๋†“์•„ ๋‚˜์ค‘์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ์ผ์ด ์—†๋„๋ก ํ•œ๋‹ค.

2. ๋„ํ™”์ง€๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

3. ๋ชจ๋“  ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ์•Œ์•„์•ผ ๊ฐ€์žฅ ๋„“์€ ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ทธ๋ฆผ ํฌ๊ธฐ๋ฅผ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

4. ์•ž์„œ bfs๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. bfs๋Š” ๋ชจ๋“  ์นธ์„ ํ™•์ธํ•˜๋Š” ๊ธฐ๋ฒ•(์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N)) ์ด๋ฏ€๋กœ ์ด์ค‘ for๋ฌธ์„ ํ†ตํ•ด ๋ชจ๋“  ์นธ์„ ํ•œ๋ฒˆ์”ฉ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

5. ์ ‘๊ทผํ•œ ํ•ด๋‹น ์นธ์˜ ๊ฐ’์ด 0์ด๋ฉด ๊ทธ๋ฆผ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ฌด์‹œํ•˜๊ณ , ๊ฐ’์ด 1์ด๋ฉด ํ•ด๋‹น ์นธ๋ถ€ํ„ฐ ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ์กฐ์‚ฌํ•ด์„œ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋„๋ก ํ•œ๋‹ค.

6. ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ›„, ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ์กฐ์‚ฌํ•ด์„œ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋„๋ก ํ•˜๊ธฐ์œ„ํ•ด ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ธ bfs()๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

7. bfs๋Š” ํ๋ฅผ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋ฏ€๋กœ ํ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ํ•ด๋‹น ์นธ์€ ์ด๋ฏธ ๊ฐ’์ด 1์ž„์„ ํ™•์ธํ•˜๊ณ  bfsํ•จ์ˆ˜๋กœ ๋“ค์–ด์™”์œผ๋ฏ€๋กœ ๋„“์ด๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •ํ•œ ๋ณ€์ˆ˜ count_area = 1๋กœ ์„ค์ •ํ•œ๋‹ค. ๋˜ํ•œ ํ•ด๋‹น ์นธ์˜ ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•จ์œผ๋กœ์จ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

8. ์ฃผ๋ณ€ ์ƒํ•˜์ขŒ์šฐ 4๋ฐฉํ–ฅ์„ ์‚ดํ”ผ๊ธฐ ์œ„ํ•ด dx์™€ dy๋ฅผ ์„ค์ •ํ•œ๋‹ค.

9. ํ๊ฐ€ ๋ชจ๋‘ ๋น„๊ฒŒ ๋˜๋ฉด while๋ฌธ์„ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

10. ํ์—์„œ ์›์†Œ๋ฅผ ๋นผ๋‚ด๋ฉฐ ํ•ด๋‹น ์ขŒํ‘œ๋ถ€ํ„ฐ ํƒ์ƒ‰ ์‹œ์ž‘.

11. ๋นผ๋‚ธ ์›์†Œ(์ขŒํ‘œ)์˜ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

12. ํ•ด๋‹น ๋„ํ™”์ง€๋ฅผ ๋ฒ—์–ด๋‚œ ์ขŒํ‘œ๋Š” ๋ฌด์‹œ๋˜๋„๋ก ํ•œ๋‹ค.

13. ํ•ด๋‹น ์ขŒํ‘œ๋กœ๋ถ€ํ„ฐ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š”๋ฐ, ํƒ์ƒ‰๋œ ์ขŒํ‘œ์˜ ๊ฐ’์ด 1์ด๋ฉด ํ•ด๋‹น ์นธ์˜ ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ , count_area์— +1 ํ•œ๋’ค, ํ์— ์ง‘์–ด ๋„ฃ์–ด์„œ ์„œ ๊ทธ ์ขŒํ‘œ ๋˜ํ•œ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

14. ํ๊ฐ€ ๋น„์–ด์„œ ํ•ด๋‹น ์ขŒํ‘œ๋กœ๋ถ€ํ„ฐ ์ธ์ ‘ํ•œ ๋ชจ๋“  ์นธ์„ ์กฐ์‚ฌํ•œ ํ›„, ๊ทธ ๋„“์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

15. ๋ฐ˜ํ™˜๋ฐ›์€ ๋„“์ด๋ฅผ area_lst์— ํ•ด๋‹น์นธ๊ณผ ์ด์–ด์ ธ์žˆ๋Š” ๋ชจ๋“ ์นธ์˜ ๋„“์ด(์ฆ‰, ๊ทธ๋ฆผ์˜ ๋„“์ด)๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

16. area_lst์— ๋ชจ๋“  ๊ทธ๋ฆผ์˜ ๋„“์ด๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ๊ธธ์ด๋ฅผ ์กฐ์‚ฌํ•˜๋ฉด ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

17. ์ถœ๋ ฅ