www.acmicpc.net/problem/15654

 

15654번: N과 M (5)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net


  • 지금까지의 N과 M 시리즈는 다 1 ~ 8 까지의 값을 기준으로 했지만, 이 문제는 수열을 입력받는다.
  • 입력받은 수열을 정렬해주고, 재귀호출에서는 값이 아닌 수열의 인덱스를 사용해서 구한다.
  • 나머지 방식은 동일하다.

#include <iostream>
#include <algorithm>

using namespace std;

int n, m;
int arr[8];
bool visited[8];
int ans[8];

void check(int cur, int size)
{
    if(size == m)
    {
        for(int i = 0 ; i < m ; i++)
        {
            cout << ans[i] << " ";
        }
        cout << '\n';
    }
    for(int i = 0 ; i < n ; i++)        // 수열에서 중복값만 없으면 되기 때문에 모든 값들 탐색
    {
        if(visited[i] == false)         // 앞에서 뽑은 값이 아닐 경우에
        {
            visited[i] = true;
            ans[size] = arr[i];         // 답에 넣어주고
            check(i, size + 1);         // 다음 자릿수 확인
            visited[i] = false;
        }
    }
}

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

    cin >> n >> m;
    for(int i = 0 ; i < n ; i++)
    {
        cin >> arr[i];
    }
    sort(arr, arr+n);                   // 입력된 수열 정렬
    
    check(-1, 0);                       // 시작을 -1 로 해야 0번 인덱스부터 훑을 수 있음
}

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

[백준] 1016.cpp : 제곱 ㄴㄴ 수  (0) 2020.07.26
[백준] 15657.cpp : N과 M (8)  (0) 2020.07.25
[백준] 15652.cpp : N과 M (4)  (0) 2020.07.23
[백준] 2407.cpp : 조합  (0) 2020.07.22
[백준] 15353.cpp : 큰 수 A+B (2)  (0) 2020.07.20

+ Recent posts