Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 1926. ๊ทธ๋ฆผ

deo2kim 2020. 9. 8. 08:52
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

S1 | BFS, ๊ทธ๋ž˜ํ”„

 

๊ทธ๋ฆผ์„ ํ•˜๋‚˜ ์„ ํƒ ํ•œ๋‹ค.

๊ทธ ๊ทธ๋ฆผ์˜ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

๋งŒ์•ฝ ์ƒํ•˜์ขŒ์šฐ์— ๊ทธ๋ฆผ์ด ์žˆ๋‹ค๋ฉด ๊ทธ ๊ทธ๋ฆผ์„ ์„ ํƒ ํ›„ ๋‹ค์‹œ ์ƒํ•˜์ขŒ์šฐ ์„ ํƒํ•œ๋‹ค.

๋” ์ด์ƒ ์ฒ˜์Œ ์„ ํƒํ•œ ๊ทธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ๋œ ๊ทธ๋ฆผ์ด ์—†์„ ๋•Œ ๊นŒ์ง€ ํƒ์ƒ‰.

 

์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ์ฒ˜์Œ ๊ทธ๋ฆผ์„ ์„ ํƒํ•˜๋ฉด ๊ทธ๋ฆผ์˜ ๊ฐฏ์ˆ˜ +1

๊ทธ๋ฆผ์„ ํƒํ›„ ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊ทธ๋ฆผ์„ ์ฐพ์œผ๋ฉด ๊ทธ๋ฆผ์˜ ํฌ๊ธฐ +1

 

๐Ÿ’จ ๊ธฐ๋ณธ์ ์ธ BFS ๋ฌธ์ œ

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

from collections import deque


def bfs(x, y):
    q = deque()
    q.append((x, y))
    images[i][j] = 0
    size = 1  # ์ตœ์ดˆ ๋“ค์–ด๊ฐˆ ๋•Œ ๊ทธ๋ฆผ ํฌ๊ธฐ 1๋กœ ์‹œ์ž‘
    while q:
        x, y = q.popleft()
        for k in range(4):  # ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰
            nx = x + dx[k]
            ny = y + dy[k]
            if 0 <= nx < n and 0 <= ny < m:  # ์ธ๋ฑ์Šค ๋ฒ”์œ„์•ˆ์— ์žˆ๊ณ 
                if images[nx][ny]:  # ์ฃผ๋ณ€์ด ์—ฐ๊ฒฐ๋œ ๊ทธ๋ฆผ์ด๋ฉด
                    q.append((nx, ny))
                    size += 1
                    images[nx][ny] = 0
    else:
        size_list.append(size)
        return


if __name__ == "__main__":
    n, m = map(int, input().split())
    images = [list(map(int, input().split())) for _ in range(n)]

    cnt = 0  # ๊ทธ๋ฆผ์˜ ์ˆ˜
    size_list = []  # ๊ทธ๋ฆผ์˜ ํฌ๊ธฐ๋“ค
    
    dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
    for i in range(n):
        for j in range(m):
            if images[i][j]:  # ํ•œ๋ฒˆ ๋“ค์–ด๊ฐˆ ๋•Œ๋งˆ๋‹ค ๊ทธ๋ฆผ +1
                bfs(i, j)
                cnt += 1

    print(cnt)
    print(max(size_list) if size_list else 0)

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/1926

 

1926๋ฒˆ: ๊ทธ๋ฆผ

์–ด๋–ค ํฐ ๋„ํ™”์ง€์— ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์žˆ์„ ๋•Œ, ๊ทธ ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜์™€, ๊ทธ ๊ทธ๋ฆผ ์ค‘ ๋„“์ด๊ฐ€ ๊ฐ€์žฅ ๋„“์€ ๊ฒƒ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ. ๋‹จ, ๊ทธ๋ฆผ์ด๋ผ๋Š” ๊ฒƒ์€ 1๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ํ•œ ๊ทธ๋ฆผ์ด๋ผ๊ณ  ์ •์˜ํ•˜์ž. ๊ฐ€๋กœ๋‚˜ ์„ธ๋กœ๏ฟฝ๏ฟฝ

www.acmicpc.net

๋ฌธ์ œ

์–ด๋–ค ํฐ ๋„ํ™”์ง€์— ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์žˆ์„ ๋•Œ, ๊ทธ ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜์™€, ๊ทธ ๊ทธ๋ฆผ ์ค‘ ๋„“์ด๊ฐ€ ๊ฐ€์žฅ ๋„“์€ ๊ฒƒ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ. ๋‹จ, ๊ทธ๋ฆผ์ด๋ผ๋Š” ๊ฒƒ์€ 1๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ํ•œ ๊ทธ๋ฆผ์ด๋ผ๊ณ  ์ •์˜ํ•˜์ž. ๊ฐ€๋กœ๋‚˜ ์„ธ๋กœ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์€ ์—ฐ๊ฒฐ์ด ๋œ ๊ฒƒ์ด๊ณ  ๋Œ€๊ฐ์„ ์œผ๋กœ ์—ฐ๊ฒฐ์ด ๋œ ๊ฒƒ์€ ๋–จ์–ด์ง„ ๊ทธ๋ฆผ์ด๋‹ค. ๊ทธ๋ฆผ์˜ ๋„“์ด๋ž€ ๊ทธ๋ฆผ์— ํฌํ•จ๋œ 1์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋„ํ™”์ง€์˜ ์„ธ๋กœ ํฌ๊ธฐ n(1 ≤ n ≤ 500)๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ m(1 ≤ m ≤ 500)์ด ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ n+1 ์ค„ ๊นŒ์ง€ ๊ทธ๋ฆผ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (๋‹จ ๊ทธ๋ฆผ์˜ ์ •๋ณด๋Š” 0๊ณผ 1์ด ๊ณต๋ฐฑ์„ ๋‘๊ณ  ์ฃผ์–ด์ง€๋ฉฐ, 0์€ ์ƒ‰์น ์ด ์•ˆ๋œ ๋ถ€๋ถ„, 1์€ ์ƒ‰์น ์ด ๋œ ๋ถ€๋ถ„์„ ์˜๋ฏธํ•œ๋‹ค)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜, ๋‘˜์งธ ์ค„์—๋Š” ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋„“์€ ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ. ๋‹จ, ๊ทธ๋ฆผ์ด ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ๋„“์€ ๊ทธ๋ฆผ์˜ ๋„“์ด๋Š” 0์ด๋‹ค.

๋ฐ˜์‘ํ˜•