티스토리 뷰

www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 �

www.acmicpc.net

 

[DFS]

 

import sys

# 재귀 제한을 늘려준다.
sys.setrecursionlimit(10**6)

t = int(sys.stdin.readline().rstrip())

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


def dfs(x, y, group_number):
    # 현재 정점은 배추흰지렁이가 보호한다.
    group[x][y] = group_number

    # 인접한 배추들도 배추흰지렁이가 보호한다.
    for i in range(len(dx)):
        nx = x + dx[i]
        ny = y + dy[i]

        if not (0 <= nx < n and 0 <= ny < m):
            continue

        if graph[nx][ny] == 1 and group[nx][ny] == -1:
            dfs(nx, ny, group_number)


for _ in range(t):
    m, n, k = map(int, sys.stdin.readline().rstrip().split())
    graph = [[0] * m for _ in range(n)]
    group = [[-1] * m for _ in range(n)]

    for _ in range(k):
        y, x = map(int, sys.stdin.readline().rstrip().split())
        graph[x][y] = 1

    group_number = 0

    for i in range(n):
        for j in range(m):
            # 배추가 심어져 있고, 배추흰지렁이가 없다면 추가한다.
            if graph[i][j] == 1 and group[i][j] == -1:
                group_number += 1
                dfs(i, j, group_number)

    # 필요한 배추흰지렁이 최소 마리 수
    print(group_number)

 

 

[BFS]

 

import sys
from collections import deque

t = int(sys.stdin.readline().rstrip())

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


def bfs(i, j, group_number):
    # 현재 정점은 배추흰지렁이가 보호한다.
    queue = deque()
    queue.append((i, j))
    group[i][j] = group_number

    while queue:
        x, y = queue.popleft()

        # 인접한 배추들도 배추흰지렁이가 보호한다.
        for i in range(len(dx)):
            nx = x + dx[i]
            ny = y + dy[i]

            if not (0 <= nx < n and 0 <= ny < m):
                continue

            if graph[nx][ny] == 1 and group[nx][ny] == -1:
                queue.append((nx, ny))
                group[nx][ny] = group_number


for _ in range(t):
    m, n, k = map(int, sys.stdin.readline().rstrip().split())
    graph = [[0] * m for _ in range(n)]
    group = [[-1] * m for _ in range(n)]

    for _ in range(k):
        y, x = map(int, sys.stdin.readline().rstrip().split())
        graph[x][y] = 1

    group_number = 0

    for x in range(n):
        for y in range(m):
            # 배추가 심어져 있고, 배추흰지렁이가 없다면 추가한다.
            if graph[x][y] == 1 and group[x][y] == -1:
                group_number += 1
                bfs(x, y, group_number)

    # 필요한 배추흰지렁이 최소 마리 수
    print(group_number)

'알고리즘 문제풀이 > BOJ' 카테고리의 다른 글

[BOJ] 구현 - 15953 상금 헌터  (0) 2020.10.01
[BOJ] DFS/BFS - DFS와 BFS  (0) 2020.09.25
[BOJ] DFS/BFS - 2606 바이러스  (0) 2020.09.25
[BOJ] DP - 2839 설탕 배달  (0) 2020.09.24
[BOJ] DP - 14697 방 배정하기  (0) 2020.09.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함