728x90
https://www.acmicpc.net/problem/1012
flush - 배열을 0으로 초기화
out_of_bound - array index 의 잘못된 참조로 발생할 예외 방지
add_worm - 배치된 벌레가 커버가능한 배추들을 처리함
find_worm - 놓아야하는 벌레의 수를 계산
코드
#include <iostream>
#define MAX 50
using namespace std;
char loc[MAX][MAX] = {0};
int moveX[4] = {0,1,-1,0};
int moveY[4] = {1,0,0,-1};
void flush()
{
for(int i=0; i<MAX; i++)
{
for(int j=0; j<MAX; j++)
{
loc[i][j] = 0;
}
}
}
int out_of_bound(int i,int j)
{
if(i==-1 || j==-1 || i >=MAX || j >=MAX)
{
return 1;
}
else
{
return 0;
}
}
void add_worm(int i, int j)
{
for(int k=0; k<4; k++){
if(out_of_bound(i+moveX[k],j+moveY[k]))
{
continue;
}
else if(loc[i+moveX[k]][j+moveY[k]])
{
loc[i+moveX[k]][j+moveY[k]] = 0;
add_worm(i+moveX[k],j+moveY[k]);
}
}
return;
}
void find_worm(int M,int N)
{
int num_of_worm = 0;
for(int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
if(loc[i][j])
{
add_worm(i,j);
num_of_worm++;
}
}
}
cout << num_of_worm<<"\n";
}
int main()
{
int T;
int M,N,K;
int row,col = 0;
cin >> T;
for(int test = 0; test < T; test++)
{
cin >> M >> N >> K;
for(int cav = 0; cav < K; cav++)
{
cin >> row >> col;
loc[row][col] = 1;
}
find_worm(M,N);
flush();
}
return 0;
}
'프로그래밍 > programmers&bj' 카테고리의 다른 글
[C++] 백준 1080번: 행렬 (0) | 2020.07.11 |
---|---|
[C++] 백준 1058번: 친구 (0) | 2020.07.09 |
[C++][알고리즘] 백준 1003번 피보나치 함수 (0) | 2020.06.06 |
[C++][알고리즘] 달팽이 숫자 만들기 (0) | 2020.05.02 |
[C++][알고리즘] 프로그래머스:: 정수 삼각형 (0) | 2020.04.25 |