문제
https://www.acmicpc.net/problem/2667
소스
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N;
int map[25][25] = {0};
bool visited[25][25];
int dx[] = {0, 1, 0, -1};//12시부터 시계방향
int dy[] = {-1, 0, 1, 0};
int bfs(int x, int y) {
visited[x][y] = true;
int count = 0;
for (int i = 0; i < 4; i++) {
int xx = x + dx[i];
int yy = y + dy[i];
if (xx >= 0 && yy >= 0 && xx < N && yy < N && map[xx][yy] == 1 && !visited[xx][yy]) {
visited[xx][yy] = true;
count++;
count += bfs(xx, yy);
}
}
return count;
}
int main(void) {
cin >> N;
//입력
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
scanf("%1d", &map[i][j]);
}
}
//수행
vector<int> answer;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] == 1 && !visited[i][j]) answer.push_back(bfs(i, j));
}
}
//출력
sort(answer.begin(), answer.end());
int size = 0;
size = answer.size();
cout << answer.size() << endl;
for (int v : answer) {
cout << v+1 << endl;
}
return 0;
}
bfs 알고리즘으로 분리되어 있어서 bfs 로 풀려고 했는데 풀다보니 dfs 방법으로 풀었다.. ㅋㅋㅋ 그래서 처음 그대로 함수 이름은 bfs....
bfs 함수 내부에서 xx와 yy의 범위를 0과 N 사이로 안 잡아줘서 계속 "틀렸습니다!"가 나왔었다. 이런 실수 하지 마세유 제발 뭘 틀렸는지 어느 부분에서 틀렸는지 어떤 케이스에서 오류가 나는지 알려줬음 좋겠다ㅜㅜ
아 이 코드에서 중요한건 dx와 dy 배열로 for문 돌려서 주변 확인하는 것!!
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[C++][백준 1463][다이나믹 프로그래밍] 1로 만들기 :: seoftware (0) | 2020.02.20 |
---|---|
[C++][백준 1003][다이나믹 프로그래밍] 피보나치 함수 :: seoftware (0) | 2020.02.20 |
[C++][백준 1260][BFS, DFS] DFS와 BFS :: seoftware (0) | 2020.02.19 |
[C++][백준 2941][문자열 처리] 크로아티아 알파벳 :: seoftware (0) | 2020.02.16 |
[C++][백준 1316][문자열 처리] 그룹 단어 체커 :: seoftware (0) | 2020.02.16 |
댓글