# 백준 : 유기농 배추 (1012)
문제
https://www.acmicpc.net/problem/1012소스
(Github: https://github.com/wonjnlee/wallydev/blob/master/bj_1012_organiccabbage)#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <list>
#include <cmath>
using namespace std;
int M, N, K;
int map[51][51];
int visit[51][51];
vector <int> result;
void DFS(int y, int x) {
visit[y][x] = 1;
if((y > 0) && map[y - 1][x] && !visit[y - 1][x]) {
DFS(y - 1, x);
}
if((y < N - 1) && map[y + 1][x] && !visit[y + 1][x]) {
DFS(y + 1, x);
}
if((x > 0) && map[y][x - 1] && !visit[y][x - 1]) {
DFS(y, x - 1);
}
if((x < M - 1) && map[y][x + 1] && !visit[y][x + 1]) {
DFS(y, x + 1);
}
}
int main(void)
{
int testcase;
int x, y;
int cnt = 0;
cin>>testcase;
for(int i=0; i<testcase; i++) {
cin>>M>>N>>K;
for(int j=0; j<K; j++) {
cin>>x>>y;
map[y][x] = 1;
}
for(int k=0; k<N; k++) {
for(int l=0; l<M; l++) {
if(!visit[k][l] && map[k][l]) {
DFS(k, l);
cnt++;
}
}
}
result.push_back(cnt);
cnt = 0;
for(int k=0; k<51; k++) {
for(int l=0; l<51; l++) {
map[k][l] = 0;
visit[k][l] = 0;
}
}
}
for(int i = 0; i<result.size(); i++) cout<<result[i]<<endl;
return 0;
}
풀이
단지주소구하는 문제랑 너무 유형이 똑같아서 금방 풀었다.한가지 주의할점은 '문제를 똑바로 읽자'는 것!
x와 y좌표를 바꾸어서 입력받아야할줄이야.. 항상 꼼꼼하게 문제를 읽어보는 습관을 갖자.
댓글
댓글 쓰기