안녕하세요 11724번 질문드려요!
안녕하세요! 강의 수강 중 질문이 있어 질문 드립니다.
현재 이런식으로 코드를 작성했고, 백준 스타일에 맞춰 제출을 했는데 오답처리가 되었습니다. 디버깅 시에도 1번예제
6 5 1 2 2 5 5 1 3 4 4 6
이걸 입력했을 때 2가 나오는 것이 아닌 dfs를 호출시 if절에서 전부 vistied[i] 부분이 false처리가 되어서 입력한 크기인 6이 answer로 계속 출력되고 있습니다.
어느 부분이 문제여서 계속 찾고 있지만 발견하지 못하여 질문드립니다.package algorithmstudy.dfs; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class boj11724 { final static int MAX = 1000 + 10; static boolean[][] graph; static boolean[] visited; static int N, M; static int answer; static void dfs(int idx) { visited[idx] = true; for (int i = 1; i <= N; i++) { if (!visited[idx] && graph[idx][i]) { dfs(i); } } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); // 1. graph에 연결 정보 채우기 graph = new boolean[MAX][MAX]; visited = new boolean[MAX]; for (int i = 0; i < M; i++) { st = new StringTokenizer(br.readLine()); int u = Integer.parseInt(st.nextToken()); int v = Integer.parseInt(st.nextToken()); graph[u][v] = true; graph[v][u] = true; } for (int i = 1; i <= N; i++) { if (!visited[i]) { answer++; dfs(i); } } bw.write(String.valueOf(answer)); br.close(); bw.close(); } }
Câu trả lời 1
2
이정우님 안녕하세요 🙂
작성해주신 코드는 99% 정답인데 딱 하나 잘못된 것 같습니다!
for (int i = 1; i <= N; i++) {
if (!visited[idx] && graph[idx][i]) {
dfs(i);
}
}DFS 함수 내부에서 다음 DFS를 재귀적으로 호출하는 이 부분에서 첫 번째 조건이 잘못되었습니다.
반복문위에서 visited[idx] = true라고 값을 담아주고, 조건문에서 !visited[idx]를 보고 있기 때문에 재귀 호출이 절대 이뤄지지 않는 코드가 됐습니다.
원래 의도했던 것은 "다음 노드를 방문한 적이 없는지"를 확인하고 싶었던 것이기 때문에 !visited[i]를 확인하도록 다음과 같이 수정하면 정답이 나올 거에요!
for (int i = 1; i <= N; i++) {
if (!visited[i] && graph[idx][i]) {
dfs(i);
}
} 이 외에도 혹시 궁금한 점이 있으면 알려주세요! 공부 화이팅하세요 :)
dfs 부문을 이렇게 작성해도 되나요?
1
71
1
x랑 y를 거꾸로 쓰는 개념이 너무 헷갈립니다...
1
94
2
dfs 파라미터에 count를 넣는이유
1
62
2
graph 채울때 for문 설계 질문
1
71
2
질문있습니다.
1
71
1
다른 강의 언제나오나용?
1
92
2
노드간 거리 계산
1
145
1
안녕하세요, 혹시 다른문제도 여쭤볼 수 있을까요?
1
130
1
최근에 올린 질문, 코드블럭으로 공유드립니다!
1
143
1
질문이 있습니다. dfs 메서드에 order를 이렇게 구현하면 안되는 이유가 무엇인가요?
0
133
2
깊이우선탐색2 백준 24480 수업노트에...
1
115
1
백준 24479 문제 제출 결과 "틀렸습니다" 라고만 나와서 어떤 부분이 틀렸는지 잘 모르겠어요 피드백 부탁드립니다
1
249
3
graph 만들때 boolean[][] 으로 만드는 경우랑 int[][] 나 ArrayList<Integer>[] 로 만드는 기준이 어떻게 되나요?
1
201
2
graph를 2차원 배열 또는 List로 하는 기준을 어떤식으로 잡으면 좋을까요...?
1
224
1
강사님 안녕하세요! 깊이 우선 탐색 2 (백준 24480)에서 제공하는 풀이 코드에서 궁금한 점이 있어서 질문 드립니다!
1
325
3
촌수 계산
1
354
3
연결 요소의 개수 (백준 11724)
1
267
1
백준 24479 문제 시간 초과 질문 드려요
1
382
1
백준 실행시 틀립니다.
1
372
1
재귀대신 스택으로 구현하면 안될까요?
1
408
1
dfs 매개변수에서 y,x 를 왜 순서를 반대로 쓰셨는지 궁금합니다.
1
370
1
출력할 때 BufferedWriter? StringBuilder?
1
508
1
answer++ 위치 질문
1
254
1
code의 어디가 잘못된지 도저히 모르겠습니다..
1
269
1

