www.acmicpc.net/problem/15650

 

15650번: N과 M (2)

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

www.acmicpc.net


  • 1부터 N 까지 가능한 조합들에 대해서 오름차순으로 출력해야 한다.
  • STL 에서 제공해주는 next_permutation 을 사용하면, 문제에서 구해야 하는 수열들이 자동으로 구해지게 된다.
  • 수열은 그냥 나열된 수 들일 뿐이다. 등차 수열이 아닌 점에 유의하자(난 왜 등차수열로 풀고 있었을까)
  • 다만 다른 N 과 M 문제들처럼 백트래킹을 이용하여 재귀적으로 푸는 것이 정석이다.
  • 이 경우, 15649번 - N 과 M (1) 문제에서 탐색을 시작하는 인덱스만 조절해주면 된다.

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int n, m;

int main(void)
{
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(0);

    cin >> n >> m;

    vector<bool> pv(n, true);
    for(int i =  0 ; i < m ; i++)           // 8개 중 m 개의 조합을 계산
    {
        pv[i] = false;
    }
    do
    {
        for(int i = 0 ; i < pv.size() ; i++)
        {
            if(pv[i] == 0) cout << i + 1 << " ";    // 해당 조합 출력
        }
        cout << '\n';
    } while(next_permutation(pv.begin(), pv.end()));
}

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

[백준] 15353.cpp : 큰 수 A+B (2)  (0) 2020.07.20
[백준] 16566.cpp : 카드 게임  (0) 2020.07.19
[백준] 16236.cpp : 아기 상어  (0) 2020.07.16
[백준] 15686.cpp : 치킨 배달  (0) 2020.07.15
[백준] 14500.cpp : 테트로미노  (0) 2020.07.13

+ Recent posts