알고리즘 풀이

[C#] 백준 11725번 문제풀이

bimtaeur30 2026. 1. 24. 13:22

문제번호: 11725

문제명: 트리의 부모 찾기

문제링크: https://www.acmicpc.net/problem/11725

문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다.

 

이번 문제는 방향이 주어지지 않은 오직 두 정점간의 관계만 주어진 트리 정보를 가지고 각 노드의 부모를 찾아내는 문제입니다. 인접 리스트 List<int>[]를 사용하여 각 노드의 관계를 저장하였고 DFS를 사용하여() 각 노드의 부모를 찾아내었습니다. 찾아낸 부모는 answer배열에 저장한 후 배열의 2번 인덱스부터 마지막까지 출력해주었습니다.

다음은 정답코드입니다.

 

public static void Main()
{
    StreamReader sr = new StreamReader(Console.OpenStandardInput());
    StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

    int N = int.Parse(sr.ReadLine());
    List<int>[] Adj = new List<int>[N]; // 1 ~ 7

    for (int i = 0; i < N; i++)
    {
        Adj[i] = new List<int>();
    }
    for (int i = 0; i < N - 1; i++)
    {
        int[] input = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
        Adj[input[0] - 1].Add(input[1]);
        Adj[input[1] - 1].Add(input[0]);
    }

    bool[] visited = new bool[N];
    int[] answers = new int[N];

    DFS(0);

    void DFS(int index)
    {
        visited[index] = true;
        foreach (int next in Adj[index])
        {
            int nextIdx = next - 1;

            if (!visited[nextIdx])
            {
                answers[nextIdx] = index + 1;
                // 부모 정보를 여기서 기록
                DFS(nextIdx);
            }
        }
    }

    for (int  i = 1;  i < answers.Length;  i++)
    {
        sw.WriteLine(answers[i]);
    }

    sr.Close();
    sw.Close();
}

'알고리즘 풀이' 카테고리의 다른 글

[C#] 백준 35143번 문제풀이  (0) 2026.01.26
[C#] 백준 1417번 문제풀이  (0) 2026.01.25
[C#] 백준 11053번 문제풀이  (0) 2026.01.23
[C#] 백준 15654번 문제풀이  (0) 2026.01.22
[C#] 백준 15652번 문제풀이  (0) 2026.01.21