www.acmicpc.net/problem/15652

 

15652번: N과 M (4)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net


  • N과 M 수열 시리즈 중 하나
  • 기존 문제들을 풀었다면  중복이 가능하다는 점만 고려하면 되기 때문에 간단하게 풀린다.
  • 재귀 함수 내부적으로 돌아가는 반복문을 어떻게 조절하느냐가 시리즈의 핵심 내용

#include <iostream>

using namespace std;

int n, m;

int ans[8];

void check(int cur, int size)
{
    if(size == m)                       // 길이가 M 에 도달하면 값들 출력 후 종료
    {
        for(int i = 0 ; i < m ; i++)
        {
            cout << ans[i] << " ";
        }
        cout << endl;
        return;
    }
    for(int i = cur ; i < n ; i++)      // 중복 가능하기 때문에 cur 부터 끝까지 반복
    {
        ans[size] = i + 1;              // 현재 자리에 값을 넣어주고
        check(i, size + 1);             // 다음 값 결정하기 위한 재귀
    }
}

int main(void)
{
    cin >> n >> m;
    check(0, 0);
}

'PS > BOJ' 카테고리의 다른 글

[백준] 15657.cpp : N과 M (8)  (0) 2020.07.25
[백준] 15654.cpp : N과 M (5)  (0) 2020.07.24
[백준] 2407.cpp : 조합  (0) 2020.07.22
[백준] 15353.cpp : 큰 수 A+B (2)  (0) 2020.07.20
[백준] 16566.cpp : 카드 게임  (0) 2020.07.19

+ Recent posts