본문 바로가기

백준/실버

[백준 15565번] N과 M (11) (C++)

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

 

15665번: N과 M (11)

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

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = INT_MAX;

int N, M, arr[8], result[8];

void func(int cnt)
{
    if(cnt == M) 
    {
        for(int i=0; i<M; i++) cout << result[i] << " ";
        cout <<"\n";
        return;
    }

    int tmp = 0;
    for(int i=0; i<N; i++)
    {
        if(tmp == arr[i]) continue; //직전 수 스킵
        tmp = result[cnt] = arr[i]; //현재 수 및 순서 저장
        func(cnt+1);
    }
}

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

    cin >> N >> M;
    for(int i=0; i<N; i++) cin >> arr[i];
    sort(arr, arr+N);

    func(0);

    return 0;
}

 

N과 M (10) 번 문제에서 같은 수를 여러번 고를 수 있게 변경된 문제이다.

i같은 수를 여러번 고를 수 없기에 현재 인덱스 다음 값을 넘겨줬던 10번 문제와 달리, 이번 문제는 인덱스를 넘겨줄 필요가 없다.

 

참고링크 : https://blob-thinking.tistory.com/548

 

[백준 15664번] N과 M (10) (C++)

문제링크 : https://www.acmicpc.net/problem/15664 15664번: N과 M (10) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출

blob-thinking.tistory.com