컴굥일지

[BOJ/백준 15652][C++] N과 M (4) 본문

알고리즘/코테 문제

[BOJ/백준 15652][C++] N과 M (4)

gyong 2023. 7. 16. 21:18
반응형

문제

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

백준 15652

 

문제 내용

1~N까지의 자연수 중에 M개를 골라 수열을 만들어 출력하면 된다.

이때 고르는 자연수는 서로 중복이어도 상관없으나, 비내림차순 수열이어야 한다

길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.

 

문제 풀이

N과 M (3)과 다르게 N과 M (4)는 수열이 비내림차순이어야 한다는 조건이 추가되었다.

따라서, N과 M (2)처럼 이전에 어떤 값을 선택했는지도 같이 인자로 넘겨주어야 한다.

또한, N과 M (3)처럼 원소의 중복을 허용하기 때문에 used 배열을 쓸 이유가 없다.

 

[BOJ/백준 15650][C++] N과 M (2)

문제 https://www.acmicpc.net/problem/15650 문제 내용 1~N까지의 자연수 중에 M개를 골라 수열을 만들어 출력하면 된다. 이때 수열은 오름차순이어야 하며, 사전 순으로 증가하는 순서대로 출력해야 한다.

gyong0117.tistory.com

 

 

[BOJ/백준 15651][C++] N과 M (3)

문제 https://www.acmicpc.net/problem/15651 문제 내용 1~N까지의 자연수 중에 M개를 골라 수열을 만들어 출력하면 된다. 이때 고르는 자연수는 서로 중복이어도 상관 없다. 문제 풀이 N과 M (1)과 다르게 N과

gyong0117.tistory.com

 

코드

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

int n, m;

vector<int> result(8, 0);

void back(int cnt, int before) { // 몇개를 선택했는지, 이전에 선택한 값
    if (cnt == m) {
        for (int i = 0; i < m; i++) {
            cout << result[i] << ' ';
        }
        cout << '\n';
        return;
    }

    for (int i = before; i <= n; i++) {
        result[cnt] = i;
        back(cnt + 1, i);
    }
}

int main() {
    cin >> n >> m;
    back(0, 1);
}

 

반응형
Comments