#문제
https://www.acmicpc.net/problem/1743
#작성 코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#include <iostream>
using namespace std;
/*
1743 음식물 피하기
떨어진 음식물 중에 제일 큰 음식물은 피하고 싶다!
*/
int n, m, k; // 통로의 세로길이, 가로길이, 음식물 쓰레기 개수
bool trash[101][101]; // [1][1] ~ [n][m] 사용.
bool visit[101][101];
int tmpbunch=0;
int bunch=0; // 가장 큰 음식물 쓰레기의 크기 저장.
int d[4][2] = {{1,0}, {-1,0}, {0,1}, {0,-1}};
void dfs(int x, int y){
visit[x][y] = true;
tmpbunch++; // 현재 [x][y]개수를 tmpbunch에 추가.
for(int v=0; v<4; v++){
int newx = x+d[v][0];
int newy = y+d[v][1];
if( 1<=newx&&newx<=n&&1<=newy&&newy<=m ){
if( trash[newx][newy]==true && visit[newx][newy]==false ){
visit[newx][newy] = true;
dfs(newx, newy);
}
}
}
}
int main(){
/* 통로의 세로길이, 가로길이, 음식물 쓰레기 개수 입력*/
cin>>n>>m>>k;
/* k개의 음식물이 떨어진 좌표 입력 */
for(int K=0; K<k; K++){
int x, y;
cin>>x>>y;
trash[x][y] = 1;
}
/* 음식물 중 가장 큰 음식물의 '크기'를 출력 */
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
// 음식물 쓰레기를 찾는다.
if( trash[i][j]==true ){
// 방문한 적 없는 쓰레기라면 그 쓰레기에 연결된 쓰레기 탐색.
if( visit[i][j]==true ) continue;
else{
dfs(i, j);
}
}
bunch = max(bunch, tmpbunch);
tmpbunch=0;
}
}
cout<<bunch<<'\n';
return 0;
}
|
cs |
##
전엔 이런 문제들을 대부분 bfs로 풀었는데, dfs로 푸는 방법에도 익숙해지는 중...
'BOJ' 카테고리의 다른 글
BOJ 10026번 :: 적록색약 (0) | 2020.02.16 |
---|---|
BOJ 2583번 :: 영역 구하기 (0) | 2020.02.13 |
BOJ 11724번 :: 연결 요소의 개수 (0) | 2020.02.12 |
BOJ 9466번 :: 텀 프로젝트 (0) | 2020.02.12 |
BOJ 5430번 :: AC (0) | 2020.02.11 |