https://www.acmicpc.net/problem/2667
#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
using namespace std;
struct Node {
int row;
int col;
};
int dr[] = { 0, 0, 1, -1 };
int dc[] = { 1, -1, 0, 0 };
int n;
int arr[25][25] = { 0, };
int check[25][25] = { 0, };
queue<Node> q;
int answer = 0;
vector<int> cnt_apart;
void bfs(int row, int col) {
check[row][col] = 1;
q.push({ row, col });
int cnt = 1;
while (!q.empty()) {
Node now = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int nextRow = now.row + dr[i];
int nextCol = now.col + dc[i];
if (nextRow < 0 || nextCol < 0 || nextRow >= n || nextCol >= n) continue;
if (check[nextRow][nextCol]) continue;
if (!arr[nextRow][nextCol]) continue;
check[nextRow][nextCol] = 1;
q.push({ nextRow, nextCol });
cnt += 1;
}
}
cnt_apart.push_back(cnt);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
string temp;
cin >> temp;
for (int j = 0; j < temp.size(); j++) {
arr[i][j] = int(temp[j] - '0');
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (arr[i][j] == 1 && !check[i][j]) {
bfs(i, j);
answer += 1;
}
}
}
cout << answer;
cout << "\n";
sort(cnt_apart.begin(), cnt_apart.end());
for (int i = 0; i < cnt_apart.size(); i++) {
cout << cnt_apart[i] << "\n";
}
return 0;
}
문제의 오름차순을 까먹고 단지순으로 출력해서 틀렸다.
algorithm을 추가하여 sort로 정렬하면 성공!
그냥 빠른 입출력을 위해 아무 생각없이 코드를 추가했었는데, 이번에 정리하면서 코드가 어떻게 작동되고, 왜 시간을 절약할 수 있는지 이해하게 되어 더 오랫동안 기억에 남을 것 같다!!🤩
느낀점 너무 가식같아요!^^ㅎ