Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 1012. ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

deo2kim 2020. 10. 31. 13:55
๋ฐ˜์‘ํ˜•

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

  • S2 | ๊ทธ๋ž˜ํ”„, DFS

๋ฐฐ์ถ”๋ฐญ๊ณผ ๋ฐฐ์ถ”์˜ ์œ„์น˜๋ฅผ 2์ฐจ์›๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค.

1์€ ๋ฐฐ์ถ”

๋ฐฐ์ถ”๋ฆฌ์ŠคํŠธ์—์„œ ํ•˜๋‚˜ ๊บผ๋‚ด์„œ DFS๋กœ ์ธ์ ‘ํ•œ ๋ฐฐ์ถ”๋“ค์„ ๋‹ค 0์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

 

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

import sys

input = sys.stdin.readline


def find_dummy(x: int, y: int):
    farm[x][y] = 0
    stack = [(x, y)]
    dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
    while stack:
        cx, cy = stack.pop()
        for k in range(len(dx)):
            nx = cx + dx[k]
            ny = cy + dy[k]
            if 0 <= nx < N and 0 <= ny < M and farm[nx][ny] == 1:
                stack.append((nx, ny))
                farm[nx][ny] = 0


if __name__ == '__main__':
    print()
    for _ in range(int(input())):  # ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๊ฐœ์ˆ˜
        M, N, K = map(int, input().split())  # ๊ฐ€๋กœ, ์„ธ๋กœ, ๋ฐฐ์ถ” ๊ฐœ์ˆ˜
        farm = [[0] * M for _ in range(N)]

        cabbages = []  # ๋ฐฐ์ถ”๋ฆฌ์ŠคํŠธ
        for _ in range(K):
            X, Y = map(int, input().split())
            farm[Y][X] = 1  # ๋ฐฐ์ถ” ์‹ฌ๊ธฐ
            cabbages.append((Y, X))

        answer = 0
        for cabbage in cabbages:
            if farm[cabbage[0]][cabbage[1]] == 1:  # ๋ฐฐ์ถ”๊ฐ€ ์‹ฌ์–ด์ ธ์žˆ์œผ๋ฉด
                find_dummy(cabbage[0], cabbage[1])  # ๊ทธ ๋ฐฐ์ถ”์™€ ์ฃผ๋ณ€ ๋ฐฐ์ถ” 0์œผ๋กœ ๋งŒ๋“ค๊ธฐ
                answer += 1  # ๋”๋ฏธ์˜ ๊ฐœ์ˆ˜ ์ถ”๊ฐ€

        print(answer)
 

 

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

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

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

 

1012๋ฒˆ: ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

์ฐจ์„ธ๋Œ€ ์˜๋†์ธ ํ•œ๋‚˜๋Š” ๊ฐ•์›๋„ ๊ณ ๋žญ์ง€์—์„œ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋†์•ฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋ ค๋ฉด ๋ฐฐ์ถ”๋ฅผ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‚˜๋Š” ํ•ด์ถฉ ๋ฐฉ์ง€์— 

www.acmicpc.net

๋ฐ˜์‘ํ˜•