배운것
scanf("%1d",&a[i][j]); 쓰는 경우:
정수가 띄어쓰기 없이 입력 받을 때 cin으로 입력이 어렵다.
이때 %1d를 사용하면 붙어있어도 한번에 한개 씩 입력받을 수 있다.
sort array 사용법
BFS
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int a[30][30];
int group[30][30];
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
int n;
int ans[25*25];
void bfs(int x, int y, int cnt) {
queue<pair<int,int>> q;
q.push(make_pair(x,y));
group[x][y] = cnt;
while (!q.empty()) {
x = q.front().first;
y = q.front().second;
q.pop();
for (int k=0; k<4; k++) {
int nx = x+dx[k];
int ny = y+dy[k];
if (0 <= nx && nx < n && 0 <= ny && ny < n) {
if (a[nx][ny] == 1 && group[nx][ny] == 0) {
q.push(make_pair(nx,ny));
group[nx][ny] = cnt;
}
}
}
}
}
int main() {
scanf("%d",&n);
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
scanf("%1d",&a[i][j]);
}
}
int cnt = 0;
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
if (a[i][j] == 1 && group[i][j] == 0) {
bfs(i, j, ++cnt);
}
}
}
printf("%d\n",cnt);
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
ans[group[i][j]]+=1;
}
}
sort(ans+1, ans+cnt+1);
for (int i=1; i<=cnt; i++) {
printf("%d\n",ans[i]);
}
return 0;
}
DFS
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int a[30][30];
int d[30][30];
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
int n;
int ans[25*25];
void dfs(int x, int y, int cnt) {
d[x][y] = cnt;
for (int k=0; k<4; k++) {
int nx = x+dx[k];
int ny = y+dy[k];
if (0 <= nx && nx < n && 0 <= ny && ny < n) {
if (a[nx][ny] == 1 && d[nx][ny] == 0) {
dfs(nx, ny, cnt);
}
}
}
}
int main() {
scanf("%d",&n);
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
scanf("%1d",&a[i][j]);
}
}
int cnt = 0;
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
if (a[i][j] == 1 && d[i][j] == 0) {
dfs(i, j, ++cnt);
}
}
}
printf("%d\n",cnt);
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
ans[d[i][j]]+=1;
}
}
sort(ans+1, ans+cnt+1);
for (int i=1; i<=cnt; i++) {
printf("%d\n",ans[i]);
}
return 0;
}
'Algorithm > C++' 카테고리의 다른 글
[백준 7576] 토마토 (DFS/BFS) (0) | 2022.06.16 |
---|---|
[백준 2178] 미로 탐색 (0) | 2022.06.14 |
[백준 11724] 연결 요소의 개수 (0) | 2022.06.13 |
[백준 11399] ATM (0) | 2022.06.04 |
[백준 1260] DFS와 BFS (0) | 2022.06.04 |
댓글