https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
문제 해결 과정
착안
상하좌우로 연결된 배추들 사이에는 하나의 배추흰지렁이만 있어도 해충 예방이 가능하므로, 이를 표현하기 위해 편의상 아래와 같은 과정을 주어지는 배추밭 모양에 따라 반복적으로 수행하여 필요한 총 배추흰지렁이의 수를 계산한다.
- 배추가 심어진 땅이 발견되면 필요한 배추흰지렁이의 수를 1만큼 증가시킨다.
- 깊이 우선 탐색(depth-first search, DFS) 또는 너비 우선 탐색(breadth-first search, BFS)의 방법에 따라, 현재 위치에서 시작하여 배추흰지렁이가 이동 가능한 경로 내에 존재하는 모든 배추가 심어진 땅을 찾아 값을 0으로 변경시킨다(재계산하지 않도록).
구현
[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~
더보기
#include <iostream>
using namespace std;
int T, M, N, K;
void Expansion(int field[50][50], int x, int y)
{
field[y][x] = 0;
if (x - 1 >= 0 && field[y][x - 1])
Expansion(field, x - 1, y);
if (x + 1 < M && field[y][x + 1])
Expansion(field, x + 1, y);
if (y - 1 >= 0 && field[y - 1][x])
Expansion(field, x, y - 1);
if (y + 1 < N && field[y + 1][x])
Expansion(field, x, y + 1);
}
int main()
{
cin >> T;
while (T--)
{
cin >> M >> N >> K;
int worms = 0;
int field[50][50] = { 0, };
for (int i = 0; i < K; i++)
{
int x, y;
cin >> x >> y;
field[y][x] = 1;
}
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
if (field[i][j])
{
Expansion(field, j, i);
worms++;
}
cout << worms << "\n";
}
return 0;
}
실행 결과
'C++ 코딩 문제 풀이 > 백준' 카테고리의 다른 글
[Baekjoon] 10830번: 행렬 제곱 (0) | 2023.12.04 |
---|---|
[Baekjoon] 1068번: 트리 (0) | 2023.12.01 |
[Baekjoon] 11660번: 구간 합 구하기 5 (0) | 2023.08.24 |
[Baekjoon] 14502번: 연구소 (0) | 2023.08.15 |
[Baekjoon] 17179번: 케이크 자르기 (0) | 2023.08.14 |
댓글