๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 4963 ์„ฌ์˜ ๊ฐœ์ˆ˜ (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2025. 1. 24. 01:53

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


ํ”ํ•œ ๊ตฌ์—ญ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. ๊ทผ๋ฐ ํŠน์ดํ•œ ๊ฑด ๋Œ€๊ฐ์„ ๋„ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฑธ๋กœ ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š” ๊ฒŒ ํŠน์ดํ•˜๋‹ค. 

๊ทธ๊ฒƒ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ๋‚˜๋จธ์ง„ ์‰ฌ์šด ๋ฌธ์ œ.


์•„์ด๋””์–ด

- ์ผ๋ฐ˜์ ์ธ ์ƒํ•˜์ขŒ์šฐํƒ์ƒ‰์—์„œ ์ถ”๊ฐ€๋กœ ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ๋„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.


์ „์ฒด ์ฝ”๋“œ

import sys
sys.setrecursionlimit(10**6)

dx = [0, 0, 1, -1, 1, -1, 1, -1]
dy = [1, -1, 0, 0, 1, -1, -1, 1]

def dfs(x, y):

    if x <= -1 or x >= H or y <= -1 or y >= W:
        return False
    #print(x, y)
    if island[x][y] == 1:
        island[x][y] = 0
        dfs(x, y + 1)
        dfs(x + 1, y + 1)
        dfs(x + 1, y)
        dfs(x + 1, y - 1)
        dfs(x, y - 1)
        dfs(x - 1, y - 1)
        dfs(x - 1, y)
        dfs(x - 1, y + 1)
        return True
    return False

while 1:
    W, H = map(int, input().split())
    if W == 0 and H == 0:
        break
    answer = 0
    island = []
    for _ in range(H):
        island.append([int(x) for x in sys.stdin.readline().rstrip().split()])
    #print(island)

    for i in range(H):
        for j in range(W):
            if dfs(i, j):
                answer += 1

    print(answer)

์ฝ”๋“œ ์„ค๋ช…

dx = [0, 0, 1, -1, 1, -1, 1, -1]
dy = [1, -1, 0, 0, 1, -1, -1, 1]
dfs(x, y + 1)
dfs(x + 1, y + 1)
dfs(x + 1, y)
dfs(x + 1, y - 1)
dfs(x, y - 1)
dfs(x - 1, y - 1)
dfs(x - 1, y)
dfs(x - 1, y + 1)

 

๊ธฐ๋ณธ์ ์ธ ํƒ์ƒ‰์—์„œ ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ๋งŒ ์ถ”๊ฐ€ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.