본문 바로가기
알고리즘/백준

[백준/C,C++] 15652번: N과 M (4)

by 이민훈 2021. 3. 6.

www.acmicpc.net/problem/15652

 

15652번: N과 M (4)

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

www.acmicpc.net

hackids.tistory.com/9

 

[백준/C,C++] 15649번: N과 M (1)

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

hackids.tistory.com

hackids.tistory.com/10

 

[백준/C,C++] 15650번: N과 M (2)

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

hackids.tistory.com

hackids.tistory.com/11

 

[백준/C,C++] 15651번: N과 M (3)

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

hackids.tistory.com

이번에는 조건이 비내림차순 이어야 한다고 되어있는데, 쉽게 설명하면 앞의 수열값보다 뒤의 수열값이 같거나 커야 한다는 의미입니다. 결괏값 배열인 res 배열과 현재 탐색 중인 값을 비교해 현재값이 작다면 배제하면 됩니다.

#include<iostream>
#include<vector>

using namespace std;

#define SIZE 9

int n, m;
int res[SIZE];
bool visited[SIZE];

void dfs(int cnt)
{
    if (cnt == m) {
        for (int i = 0; i < m; i++) cout << res[i] << " ";
        cout << "\n";
        return;
    }
    for (int i = 1; i <= n; i++) {
        if (cnt > 0) {
            if (res[cnt - 1] > i) continue;
        }
        res[cnt] = i;
        dfs(cnt + 1);
    }
}

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

    cin >> n >> m;

    dfs(0);

    return 0;
}

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

[백준/C,C++] 2580번: 스도쿠  (0) 2021.03.06
[백준/C,C++] 9663번: N-Queen  (0) 2021.03.06
[백준/C,C++] 15651번: N과 M (3)  (0) 2021.03.06
[백준/C,C++] 15650번: N과 M (2)  (0) 2021.03.06
[백준/C,C++] 15649번: N과 M (1)  (0) 2021.03.05

댓글