프로그래밍/알고리즘

BOJ 15656 · N과 M (7)

반응형


알고리즘 분류 : 브루트 포스  


입력받은 N개의 숫자 중에서 중복 가능하게 M개를 뽑는 문제다. N과 M (3) 문제의 소스코드를 조금 수정하면 된다.




C++ 소스코드


#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

int n, m;
int a[8];
vector<int> v;

void solve(int cnt) {
    if (cnt == m) {
        for (auto k : v) printf("%d ", k);
        printf("\n");
        return;
    }
    for (int i=0; i<n; i++) {
        v.push_back(a[i]);
        solve(cnt+1);
        v.pop_back();
    }
}

int main() {
    scanf("%d %d", &n, &m);
    for (int i=0; i<n; i++) scanf("%d", &a[i]);
    sort(a, a+n);
    solve(0);
    return 0;
}




Python 3 소스코드


from sys import stdin, stdout
input = stdin.readline
print = stdout.write

n, m = map(int, input().split())
a = sorted(list(map(int, input().split())))
v = []

def solve(cnt):
    if cnt == m:
        print(' '.join(map(str, v))+'\n')
        return
    for i in range(n):
        v.append(a[i])
        solve(cnt+1)
        v.pop()

solve(0)




참고



반응형