개발세발은 안되요

[C++] BJO 15650 : N과 M(2) 본문

알고리즘/백준

[C++] BJO 15650 : N과 M(2)

금호박 2026. 1. 26. 12:21

문제

https://www.acmicpc.net/problem/15650

 

 

 

 

풀이

기존 N과 M(1)에 조건에 하나 더 붙었다.

출력되는 수열은 오름차순이어야 한다.

즉 출력되는 수열도 오름차순이어야 하고, 각 수열 역시 오름차순 수열이어야 한다.

 

이를 위해 나는 이번 cnt에 저장할 i값과 이전에 저장한 arr[cnt-1]의 값을 비교하여,

i가 더 큰 경우에만 arr[cnt]에 i를 저장하는 방식으로 풀었다.

 

 

코드

#include <iostream>
using namespace std;

int n, m;
int arr[10];
int used[10];

void solve(int cnt){
    if(cnt == m+1){
        for(int i=1; i<=m; i++){
            cout << arr[i] << " ";
        }cout << "\n";
    }

    for(int i=1; i<=n; i++){
        if(used[i] == 0){
            if(arr[cnt-1] < i){
                arr[cnt] = i;
                used[i] = 1;
                solve(cnt+1);
                arr[cnt] = 0;
                used[i] = 0;
            }
        } 
    }  
}

int main() {
    
    cin >> n >> m;
    solve(1);
    return 0;
}

'알고리즘 > 백준' 카테고리의 다른 글

[C++]BJO 1882 : 부분수열의 합  (0) 2026.01.27
[C++] BJO 15651 : N과 M(3)  (0) 2026.01.26
[C++]BJO 15886 : 내 선물을 받아줘2  (0) 2026.01.20
[C++] BJO 9251 : LCS  (0) 2026.01.19
[C++] BJO 2156 : 포도주 시식  (0) 2026.01.16