작성
·
173
0
http://boj.kr/617eb8d45ad04996bbccba5c14c37430
테스트셋으로 나와있는건 정상으로 출력되는데,
채점하니 틀렸다고 합니다
몇번을 봐도 틀린부분을 모르겠어서 질문드립니다.
감사합니다.
답변 2
0
0
안녕하세요. 기정님 ㅎㅎ
코드 정말 잘 짜셨는데요. 딱 한가지 부분이 틀렸습니다. 주석 달아놨는데 참고 부탁드려요.
#include <iostream>
#include <algorithm>
#include <queue>
#define MAX 101
using namespace std;
// good
using ii = pair<int, int>;
int arr[MAX][MAX];
bool visited[MAX][MAX];
int n;
int dx[4] = { 1,-1,0,0 };
int dy[4] = { 0,0,1,-1 };
void bfs(int y, int x, int v) {
// good
visited[y][x] = true;
queue<ii> q;
q.push(make_pair(y, x));
while (!q.empty()) {
ii temp = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int next_y = temp.first + dy[i];
int next_x = temp.second + dx[i];
// good
if (0 <= next_x && next_x < n && 0 <= next_y && next_y <n ) {
if (arr[next_y][next_x] > v && !visited[next_y][next_x]) {
q.push(make_pair(next_y, next_x));
visited[next_y][next_x] = true;
}
}
}
}
}
int main() {
cin >> n;
// good
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
//비가 내지 않은 경우에는 어떻게 될까요? 이 초기값이 맞을까요?
int max_cnt = 0;
for(int d = 1; d<101;d++) {
int cnt = 0;
// good
fill(&visited[0][0], &visited[0][0] + MAX * MAX, false);
// good
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (d < arr[i][j] && !visited[i][j]) {
bfs(i, j, d);
cnt++;
}
}
}
max_cnt = max(cnt, max_cnt);
}
cout << max_cnt << endl;
}