3-C 코드 질문 있습니다
큰돌님의 코드를 보면 앞선 코드들과는 다르게 visited와 v벡터 안의 값을 넣는 코드와 sum을 정하는 코드가 dfs 부르기 전에 있는 것을 볼 수 있었습니다. dfs 코드 내부에서도 if(abs(a[ny][nx]- a[y][x]) >= l && abs(a[ny][nx] - a[y][x]) <= r) 이 안에 visited, v.push_back, sum을 넣어 놓으셨는데 왜 dfs 부르고 바로 적지 않고 이런 식으로 해야되는건가요? 밑에 바꿔서 넣어봤는데 틀리더라고요 이유 설명 부탁드립니다.
http://boj.kr/00af894bac9844f7b1e5e3f2436f82fd
답변 2
0
안녕하세요 준혁님
준혁님 코드처럼 해도 로직은 똑같습니다.
다만, sum초기화가 빠졌습니다.
if(!visited[i][j]){
v.clear();
sum = 0;이렇게 해보시겠어요?
0
안녕하세요, 인프런 AI 인턴이에요. 제가 이해한 바로는, 큰돌님이 작성한 코드에 초점을 맞춘 질문이신 것 같아요. 예시로 주신 코드에서 visited, v 벡터의 값을 설정하고 sum을 정하는 코드가 dfs 호출 전에 위치하고 있습니다.
전형적인 DFS(깊이 우선 탐색) 알고리즘에서는 주로 재귀 함수를 사용해서 구현하는데, 이때 방문 여부를 확인하기 위한 visited 배열과 각 노드의 값을 저장하기 위한 v 벡터는 dfs 호출 전에 미리 초기화하는 것이 일반적입니다. 그렇게 하면 DFS가 시작되기 전에 필요한 데이터들을 모두 설정할 수 있기 때문에 코드의 가독성을 높일 수 있습니다.
또한 if 문 안에 visited, v.push_back, sum을 넣어놓은 이유는, DFS를 수행하면서 이웃한 노드를 방문하게 될 때 마다 visited 배열과 v 벡터에 값을 업데이트해야 하기 때문입니다. if 문의 조건이 충족되면 방문 여부를 체크하기 위한 visited 배열을 업데이트하고, 방문한 노드의 값을 v 벡터에 추가로 저장하고 sum 값을 업데이트합니다.
질문자님이 시도해본 방법이 틀렸다고 하셨는데, 정확한 이유는 코드를 보지 않고서는 파악하기 어렵습니다. 하지만 위에서 설명한대로 visited, v, sum 값을 dfs 호출 전에 미리 설정하는 것이 일반적인 방법이기 때문에 해당 방식으로 구현하셔야 합니다.
코드의 오류가 계속되신다면, 다시 한 번 코드를 살펴보시고 철자나 문법 실수, 다른 부분에 영향을 주는 다른 부분이 있는지 확인해보세요.
도움이 되셨길 바라며, 추가로 궁금한 점이 있다면 언제든지 물어보세요. 좋은 하루 되세요!
4 - A
0
26
2
코딩살구클럽 입장이 안됩니다
0
65
2
4-F 경우의 수 질문입니다.
0
33
2
코딩살구클럽 가입이 안됩니다.
0
76
2
살구 클럽에 대한 질문있습ㄴ디ㅏ
0
57
1
교안 158페이지 문의드립니다
0
45
2
코딩살구클럽 관련 건의사항
0
116
1
코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다
0
44
1
진행 방법 질문드립니다!
0
81
2
2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.
0
63
2
2주차 개념#12 트리 순회
0
32
2
백준사이트가 종료된다고 합니다.
0
316
2
백준 서비스 종료
9
952
1
sk 하이닉스 코테 대비
0
386
2
3-G 최댓값 질문
0
54
1
모듈러 연산 값이 10이 아닌 경우도 있지 않나요?
0
84
2
3-I 코드 질문드립니다.
0
65
2
3-N 질문 있습니다.
0
68
2
학습방법
0
105
2
4-H 질문 있습니다 (코드 리뷰)
0
69
2
코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.
0
183
2
2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.
0
72
2
2주차 개념 #4-2. 인접행렬 질문있습니다.
0
65
2
1-A 문제풀이 후 궁금한 점이 생겨서 질문드립니다.
0
53
2





