알고리즘 풀이

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

bimtaeur30 2026. 1. 22. 15:02

문제번호: 15654

문제명: N과 M (5)

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

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

 

오늘은 N과 M (5)번 DFS(깊이우선탐색)와 백트래킹을 이용하는 문제를 풀었습니다. 평소 BFS와 DFS에 많이 약하고 이해를 못 했었는데 이번 문제를 통해서 DFS를 다시한번 돌아보고 공부할 수 있었습니다. 오늘은 좀 짧게 쓰겠습니다. 다음은 정답코드입니다.

 

public static void Main()
{
    StreamReader sr = new StreamReader(Console.OpenStandardInput()); // 안녕하세
    StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

    int[] NM = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
    List<int> Nums = Array.ConvertAll(sr.ReadLine().Split(), int.Parse).ToList();
    Nums.Sort();
    int N = NM[0]; // 4
    int M = NM[1]; // 2

    bool[] visited = new bool[N];
    int[] result = new int[M];

    DFS(0);

    void DFS(int depth)
    {
        if (depth == M)
        {
            for (int i = 0; i < M; i++)
            {
                sw.Write(result[i] + " ");
            }
            sw.WriteLine();

            return;
        }

        for (int i = 0; i < N; i++)
        {
            if (visited[i] == true) continue;

            visited[i] = true;
            result[depth] = Nums[i];
            DFS(depth + 1);
            visited[i] = false;
        }
    }

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

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

[C#] 백준 11725번 문제풀이  (0) 2026.01.24
[C#] 백준 11053번 문제풀이  (0) 2026.01.23
[C#] 백준 15652번 문제풀이  (0) 2026.01.21
[C#] 백준 3273번 문제풀이  (0) 2026.01.20
[C#] 백준 28278번 문제풀이  (0) 2026.01.19