2636 if문 질문입니다
556
작성자 없음
0 asked
정말 사소한 질문일 수도 있는데요
2636번 치즈 문제에서 dfs(go함수)를 들어갔을때 치즈면(1이면) return해서 dfs(go함수)가 종료되잖아요? 그럼 다시 dfs(go함수)에 들어가려면 cnt가 올라야 하는데 디버깅을 해보면 cnt는 왜 123 최대치가 3까지밖에 안오를까요??!?? 제가 어디서 헤메고 있을까요?!?? ㅜㅜㅜ
Answer 4
0
안녕하세요 재열님 ㅎㅎ 혹시 코드 올려주실 수 있으실까요?
0
정답코드를 보고 왜 이렇게 짜야지 정답일까를 보고 있었는데 (처음 의문) if문에서 return이 되면 go함수가 종료되는것으로 이해하고 있는데 그럼 다시 go함수를 어떻게 반복하지? >> while문이 반복되는건가? >> cnt가 근데 왜 최대 3번까지만 돌아가지? >> 여기서 약간 멘붕이 와서 질문했다가 >> for문에서는 상하좌우 4번을 돌리고 if문에서 return되는것은 상하좌우중 한가지만 리턴이고 다시 go함수(dfs)가 작동되는건가 해서 질문남겼습니다!! ㅜㅜ
1
음.. 근데 이거는 디버깅하면서 출력해보면 알 수 있는건데요. 제가 재밌게 디버깅코드를 추가해봤어요. 참고부탁드립니다.
#include <bits/stdc++.h>
using namespace std;
int a[104][104], visited[104][104];
const int dy[] = {-1, 0, 1, 0};
const int dx[] = {0, 1, 0, -1};
int n, m, cnt, cnt2;
vector<pair<int, int>> v;
void go(int y, int x){
visited[y][x] = 1;
if(a[y][x] == 1){
v.push_back({y, x});
return;
}
for(int i = 0; i < 4; i++){
int ny = y + dy[i];
int nx = x + dx[i];
if(ny < 0 || ny >= n || nx < 0 || nx >= m || visited[ny][nx]) continue;
go(ny,nx);
}
return;
}
int main(){
cin >> n >> m;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cin >> a[i][j];
}
}
while(true){
cout << "WHILE문작동\n";
cnt2 = 0;
fill(&visited[0][0], &visited[0][0] + 104 * 104, 0);
v.clear();
go(0, 0);
cout << "gogo : " << v.size() << "\n";
for(pair<int, int> b : v){
cnt2++;
a[b.first][b.second] = 0;
}
bool flag = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(a[i][j] != 0) flag = 1;
}
}
cout << "히익 flag : " << flag << "\n";
cnt++;
cout << "cnt : " << cnt << "\n";
if(!flag) break;
}
cout << cnt << '\n' << cnt2 << '\n';
return 0;
}
/*
WHILE문작동
gogo : 31
히익 flag : 1
cnt : 1
WHILE문작동
gogo : 22
히익 flag : 1
cnt : 2
WHILE문작동
gogo : 5
히익 flag : 0
cnt : 3
3
5
*/
0
치즈를 만나서 go함수를 빠져나오는데 어떻게 cnt가 안오르고(while문을 반복안하고)다시 go함수에 접근하는건가요!???! ㅜㅜㅜㅜ
0
go 함수가 실행되면 (y,x)좌표가 4방향으로 탐색할때, 상, 우, 하, 좌 를 탐색하는데 예를 들어 상을 탐색할 때는 1이 아니라 go(ny,nx)형태로 넣는다고 하고, 우를 탐색할때 1이면 '녹일 치즈의 위치'를 가지는 v에 넣어주고 리턴합니다. 그럼 상, 우,는 끝났고 아직 하, 좌 가 남았으니 계속 실행합니다.
저도 배우는 입장이라 틀렸을 수도 있지만 제가 이해한 논리는 그렇습니다!
0
근데 또 의문인게 만약 상하좌우에서 그게 발생되는거라면 if문 자체가 for문 안쪽에 있는게 맞지 않을까요!?? 근데 디버깅해보면 공부합시다님의 생각이 맞는것 같습니당
1-E질문입니다!
0
515
2
3-L 틀린 부분 피드백 부탁드립니다.
0
816
2
1-A문제 순열재귀함수 질문입니다.
0
380
1
1-A 일곱난쟁이문제입니다
0
454
1
문제 풀 때 방향성에 대해
0
797
1
맥에서 vs code로 실행 관련 질문입니다
0
520
1
17071번 메모리 초과
0
385
1
1-C질문입니다!
0
417
2
2-B BFS 시간초과질문
0
629
2
1-O 13번 라인
0
439
1
6-J 놀이공원 문제 질문
0
380
1
구현관련 질문
0
482
1
강의 교안
0
317
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
545
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
535
1
1-K
0
472
2
3-G번 질문있습니다.
1
472
3
3-C 실행 시간 질문드립니다.
0
492
1
4-A 문제 풀이 질문있습니다.
0
590
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
433
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
333
1
3-O go 함수 질문 드립니다.
1
444
2
4-A 출력 질문
0
302
1
1주차 1-O 질문드립니다
0
254
1

