inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편

알고리즘 수업 - 깊이 우선 탐색 1 (백준 24479)

백준 24479 문제 시간 초과 질문 드려요

해결된 질문

382

작성자 없음

작성한 질문수 0

1

안녕하세요 백준에서 테스트 결과
시간 초과 오류가 납니다 .
확인 한번 가능할까요?

import java.io.*;
import java.util.*;

public class Main {
  static final int MAX = 100000 + 10;
  static int N, M, R;
  static ArrayList<Integer>[] graph;
  static boolean[] visited;
  static int[] answer;
  static int order;

  public static void dfs(int idx) {
    visited[idx] = true;
    answer[idx] = order;
    order++;

    for (int i = 0; i < graph[idx].size(); i++) {
      int next = graph[idx].get(i);
      if (visited[next] == false) dfs(next);
    }
  }

  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());
    R = Integer.parseInt(st.nextToken());

    graph = new ArrayList[MAX];
    for (int i = 1; i <= N; i++) {
      graph[i] = new ArrayList<>();
      visited = new boolean[MAX];
      answer = new int[MAX];
      order = 1;
    }

    for (int i = 0; i < M; i++) {
      st = new StringTokenizer(br.readLine());
      int x = Integer.parseInt(st.nextToken());
      int y = Integer.parseInt(st.nextToken());
      graph[x].add(y);
      graph[y].add(x);
    }

    for (int i = 1; i <= N; i++) {
      Collections.sort(graph[i]);
    }

    dfs(R);

    for (int i = 1; i <= N; i++) {
      bw.write(String.valueOf(answer[i]));
      bw.newLine();
    }

    bw.close();
    br.close();
  }
}

java 코딩-테스트 알고리즘 dfs

답변 1

1

개발자로 취직하기

안녕하세요 리나스님 🙂

문제는 초기화하는 부분으로 보여요! graph 배열을 만들고 각 요소를 ArrayList로 초기화하는데, 이때 visited와 answer도 N번 초기화하면서 시간초과가 발생하고 있어요.

 

graph는 각 요소별로 초기화를 해줘야하는 것이 맞지만, visited나 answer는 한번만 초기화해주면 돼서 이 부분을 반복문 밖으로 빼도 되고, 이럴 경우 정답이 잘 나올겁니다.

 

혹시 또 궁금하신 부분 있으면 댓글로 알려주세요!

오늘도 공부하시느라 고생 많으셨습니다 :)

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

최근에 올린 질문, 코드블럭으로 공유드립니다!

1

143

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

백준 실행시 틀립니다.

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