최근에 올린 질문, 코드블럭으로 공유드립니다!
import java.util.*;
public class Main {
static int N, M, R;
static int[] answer;
static ArrayList<Integer>[] graph;
static boolean[] visited;
static int order = 1;
public static void dfs(int idx) {
visited[idx] = true;
answer[order] = idx;
order++;
for(int i = 0; i < graph[idx].size(); i++) {
if(!visited[graph[idx].get(i)])
dfs(graph[idx].get(i));
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
N = input.nextInt();
M = input.nextInt();
R = input.nextInt();
answer = new int[N+1];
visited = new boolean[N+1];
graph = new ArrayList[N+1];
for(int i = 1; i <= N; i++) {
graph[i] = new ArrayList<>();
}
for(int i = 0; i < M; i++) {
int x = input.nextInt();
int y = input.nextInt();
graph[x].add(y);
graph[y].add(x);
}
for(int i = 1; i < graph.length; i++) {
Collections.sort(graph[i], Collections.reverseOrder());
}
dfs(R);
for(int i = 1; i < answer.length; i++) {
System.out.println(answer[i]);
}
}
}이렇게 구현한 경우, 틀렸다고 나오는데,
ide로 돌리고 출력해보면
1
4
3
2
0
으로 정상 출력되는데.. 이유를 모르겠습니다ㅠㅠ!
선생님이 작성해주신 코드
answer[idx] = order;
order++;
제가 작성한 코드
answer[order] = idx;
order++;
이렇게해도, 제가 하나씩 디버깅해서 따라가보면, 정답과 맞게 나오는데, 틀렸다고합니다.. !
답변 1
2
예현님 안녕하세요! 제 생각에는 출력해야 되는 내용을 잘못 이해하셔서 문제가 발생하는 것 같은데, 공교롭게도 예시에서는 그 차이가 뚜렷하게 보이지 않아서 헷갈리는 것 같습니다.
우선 문제에서 요구하는 건 '각 숫자가 출력된 순서' 이기 때문에, 우리가 배열에 담아야 하는 값은 '순서'이고, 담아야 할 배열의 위치(index)가 숫자가 되는 겁니다. 그래서 결과적으로 answer[2] = 4라고 한다면 2번 노드는 4번째 방문됐다 라는 것이 문제에서 요구한 것이고, 그래서 정답이 위에 말씀해주신 제 코드처럼 나오게 됩니다!
예현님께서 작성하신 코드는 반대로 '각 순서에 출력된 숫자'를 구현하셨기 때문에 배열에 담기는 값이 '숫자(idx)'이고, 위치가 순서가 됩니다.
한 가지 예시를 들자면, dfs 동작 상 노드 방문 순서가 다음 같다고 가정할게요: 1 -> 5 -> 2 -> 3 -> 4. 그러면 예현님 답은 이 순서 그대로 출력을 하겠지만, 문제에서 원하는 답은 1 3 4 5 2 가 될겁니다.
왜냐하면 1은 첫번째 방문했고, 2는 3번째 방분, 3은 4번째 방문, 이런 식이기 때문입니다!
결론은 코드는 문제가 없어보여서 잘 나오는데, 다만 문제에서 의도한 정답을 잘못 이해하셔서 그런 것 같습니다! 문제 다시 한번 확인해보시고 혹시 추가로 궁금한 점 있으면 말씀해주세요!!
dfs 부문을 이렇게 작성해도 되나요?
1
74
1
x랑 y를 거꾸로 쓰는 개념이 너무 헷갈립니다...
1
96
2
dfs 파라미터에 count를 넣는이유
1
64
2
graph 채울때 for문 설계 질문
1
72
2
질문있습니다.
1
74
1
다른 강의 언제나오나용?
1
93
2
노드간 거리 계산
1
145
1
안녕하세요, 혹시 다른문제도 여쭤볼 수 있을까요?
1
130
1
질문이 있습니다. dfs 메서드에 order를 이렇게 구현하면 안되는 이유가 무엇인가요?
0
134
2
깊이우선탐색2 백준 24480 수업노트에...
1
119
1
백준 24479 문제 제출 결과 "틀렸습니다" 라고만 나와서 어떤 부분이 틀렸는지 잘 모르겠어요 피드백 부탁드립니다
1
250
3
graph 만들때 boolean[][] 으로 만드는 경우랑 int[][] 나 ArrayList<Integer>[] 로 만드는 기준이 어떻게 되나요?
1
202
2
graph를 2차원 배열 또는 List로 하는 기준을 어떤식으로 잡으면 좋을까요...?
1
224
1
강사님 안녕하세요! 깊이 우선 탐색 2 (백준 24480)에서 제공하는 풀이 코드에서 궁금한 점이 있어서 질문 드립니다!
1
327
3
촌수 계산
1
354
3
연결 요소의 개수 (백준 11724)
1
267
1
백준 24479 문제 시간 초과 질문 드려요
1
382
1
백준 실행시 틀립니다.
1
372
1
재귀대신 스택으로 구현하면 안될까요?
1
409
1
dfs 매개변수에서 y,x 를 왜 순서를 반대로 쓰셨는지 궁금합니다.
1
371
1
안녕하세요 11724번 질문드려요!
2
315
1
출력할 때 BufferedWriter? StringBuilder?
1
510
1
answer++ 위치 질문
1
256
1
code의 어디가 잘못된지 도저히 모르겠습니다..
1
271
1





