작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
271
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();
}
}
답변 1
1
안녕하세요 리나스님 🙂
문제는 초기화하는 부분으로 보여요! graph 배열을 만들고 각 요소를 ArrayList로 초기화하는데, 이때 visited와 answer도 N번 초기화하면서 시간초과가 발생하고 있어요.
graph는 각 요소별로 초기화를 해줘야하는 것이 맞지만, visited나 answer는 한번만 초기화해주면 돼서 이 부분을 반복문 밖으로 빼도 되고, 이럴 경우 정답이 잘 나올겁니다.
혹시 또 궁금하신 부분 있으면 댓글로 알려주세요!
오늘도 공부하시느라 고생 많으셨습니다 :)