๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ ๋ฌธ์ ์ด๋ฆ ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
์ด๋ฒ ๋ฌธ์ ๋ ์ฃผ์ด์ง ์ ๋ ฅ์ ์์๋๋ก ์์๊ณผ ๋ถ๋ชจ์ ๊ด๊ณ ๋ผ๊ณ ์๊ฐํด์ ์กฐ๊ธ ์ค๋ ๊ฑธ๋ ธ๋ ๋ฌธ์ ์ด๋ค.
๊ทธ๋์ ๋๋ Tree ์ ํน์ฑ๊ณผ ๊ฐ๋ ์ ์ด์ฉํด์ Node ๋ฅผ ๋ง๋ค์ด ํ๋ ค๊ณ ํ์ง๋ง, ๊ณ์ ์๋๋ ๊ฒ ๊ฐ์์ ํ์ด๋ฅผ ๋ณด๋ DFS ๋ฅผ ์ด์ฉํด์ ํธ๋๊ฒ ์ ์์ธ ๋ฐฉ๋ฒ ๊ฐ์๋ค.
ํด๊ฒฐ๋ฒ
์ฐ์ ํธ๋ฆฌ์ ์ฐ๊ฒฐ ๊ด๊ณ์ ๋ํด์ ์์ง ๋ชปํ๋ ์๋ฐฉํฅ ๊ทธ๋ํ๋ก ๋ง๋ค์ด์ฃผ๊ณ , ํ์ฌ ๋ฐฉ๋ฌธํ ๋ ธ๋์์ ๊ทธ ๋ค์ ๋ ธ๋๋ ๋ฌด์กฐ๊ฑด ์์์ผ๋ก ๋ณผ ์ ์๋ค.
์ด ํน์ฑ์ ์ด์ฉํด์ dfs ๋ฅผ ๋๋ฆฌ๋ฉด ๋๋ค.
์ ๋ต ์ฝ๋
public class Main {
private static List<List<Integer>> tree = new ArrayList<>();
private static int[] parent;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
parent = new int[n + 1];
for (int i = 0; i <= n; i++) {
tree.add(new ArrayList<>());
}
while(n-- > 1) {
String[] s = br.readLine().split(" ");
int from = Integer.parseInt(s[0]);
int to = Integer.parseInt(s[1]);
tree.get(from).add(to); // ์ ๋จ๋ฐฉํฅ์ด ์๋๊น?
tree.get(to).add(from);
}
dfs(1);
for (int i = 2; i < parent.length; i++) {
bw.write(parent[i] + "\n");
}
bw.flush();
bw.close();
}
private static void dfs(int start) {
for(int value : tree.get(start)) {
if(parent[value] == 0) {
parent[value] = start;
dfs(value);
}
}
}
}
๋๊ธ