알고리즘 풀이

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

bimtaeur30 2026. 2. 9. 13:25

문제번호: 15656

문제명: N과 M (7)

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

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

 

오늘은 N과M시리즈 7번 문제를 풀었습니다. 어제 풀었던 6번 문제와 다른점은 중복을 허용하며 오름차순이 아니여도 된다는 점이었습니다. 따라서 두번째 시작 인자값을 삭제해주고 중복체크하는 코드줄도 주석처리해주었습니다.

다음은 정답코드입니다.

 

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> Numbers = Array.ConvertAll(sr.ReadLine().Split(), int.Parse).ToList();
    Numbers.Sort();
    int N = NM[0]; // 3
    int M = NM[1]; // 1

    Stack<int> rs = new Stack<int>();
    bool[] chk = new bool[N + 1]; // 4

    Recur(0);

    void Recur(int num)
    {
        if (num == M)
        {
            //Console.WriteLine(rs.ToString());
            foreach (int a in rs.Reverse())
            {
                sw.Write(a + " ");
            }
            sw.WriteLine();
            return;
        }
        for (int i = 1; i < N + 1; i++)
        {
            int number = Numbers[i - 1];
            //if (chk[i] == false)
            {
                //chk[i] = true;
                rs.Push(number);
                Recur(num + 1);
                //chk[i] = false;
                if (rs.Count > 0)
                    rs.Pop();
            }
        }
    }

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

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

[C#] 백준 15663번 문제풀이  (0) 2026.02.11
[C#] 백준 15657번 문제풀이  (0) 2026.02.10
[C#] 백준 15655번 문제풀이  (0) 2026.02.08
[C#] 백준 15651번 문제풀이  (0) 2026.02.07
[C#] 백준 11722번 문제풀이  (0) 2026.02.05