문제를 풀었다고 생각했는데 75%에서 틀립니다. 뭐가 문제일까요 ㅜㅜ
340
작성한 질문수 12
기준을 배열 내에 있는 가장 높은 높이로 잡았습니다. 강수량이 배열 내부에서 가장 높은 높이보다 같거나 크다면 안전지역이 없는 것이니 0이 나온다고 생각했습니다. 배열 내부 최대값 보다 작은 것 중에 찾으면 되겠다고 생각하고 문제에 접근했습니다. 어느 부분을 잘못생각할 걸까요? ㅠㅠ
#include<bits/stdc++.h>
using namespace std;
int n, m,ret=0, nx, ny, x, y, ma = 0;
int max_len;
int h[104][104];
bool sc[104][104];
set<int> _set;
int dy[4] = {-1,0,1,0};
int dx[4] = {0,1,0,-1};
void dfs(int y, int x, int m){
sc[y][x] = 1;
for (int i =0; i<4; i++){
ny = y + dy[i];
nx = x + dx[i];
// 인덱스로 표현하면 n보다 하나 작아야하니깐 n까지 포함시켜서 커지면 안됨
if(nx < 0 || ny < 0 || nx >= n || ny >= n) continue;
if(h[ny][nx] > m && !sc[ny][nx]){
dfs(ny,nx,m);
}
}
}
int main(){
cin >> n;
for (int i =0; i < n; i++){
for (int j = 0;j < n; j++){
cin >> h[i][j];
if(h[i][j] > max_len){
max_len = h[i][j];
}
}
}
for (int i = 1 ; i < max_len; i++){
m = i;
int ret = 0;
fill(&sc[0][0],&sc[0][0] + 104*104,0);
for (int i =0; i <= n; i++){
for (int j = 0;j < n; j++){
if(h[i][j] > m && !sc[i][j]){
dfs(i,j,m);
ret++;
}
}
}
if(ma <= ret) {
ma = ret;
}
}
cout << ma << "\n";
return 0;
}
답변 2
0
안녕하세요. ㅎㅎ 정Logan님 먼저 나름 잘 짜셨는데요.
반례는 다음과 같아요.
3
1 1 1
1 1 1
1 1 1
뭐가 나와야 할까요? 1이 나와야 합니다. 아무것도 잠기지 않는 경우의 수도 생각해야 되요. (질문자님의 코드는 0이 나옵니다.)
또한 아래 코드 <=가 아니라 < 겠죠?
감사합니다.
for (int i =0; i <= n; i++){
1-E질문입니다!
0
515
2
3-L 틀린 부분 피드백 부탁드립니다.
0
815
2
1-A문제 순열재귀함수 질문입니다.
0
380
1
1-A 일곱난쟁이문제입니다
0
454
1
문제 풀 때 방향성에 대해
0
796
1
맥에서 vs code로 실행 관련 질문입니다
0
520
1
17071번 메모리 초과
0
384
1
1-C질문입니다!
0
416
2
2-B BFS 시간초과질문
0
628
2
1-O 13번 라인
0
437
1
6-J 놀이공원 문제 질문
0
379
1
구현관련 질문
0
481
1
강의 교안
0
316
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
544
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
534
1
1-K
0
471
2
3-G번 질문있습니다.
1
468
3
3-C 실행 시간 질문드립니다.
0
491
1
4-A 문제 풀이 질문있습니다.
0
589
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
433
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
332
1
3-O go 함수 질문 드립니다.
1
441
2
4-A 출력 질문
0
301
1
1주차 1-O 질문드립니다
0
253
1





