프로그래밍/알고리즘

BOJ 15655 · N과 M (6)

반응형


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


입력받은 N개의 숫자 중에서 M개를 오름차순으로 뽑는 문제다. N과 M (2) 문제의 소스코드를 수정하면 된다.




C++ 소스코드


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

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

void solve(int index, int cnt) {
    if (cnt == m) {
        for (auto k : v) printf("%d ", k);
        printf("\n");
        return;
    }
    for (int i=index; i<n; i++) {
        v.push_back(a[i]);
        solve(i+1, 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, 0);
    return 0;
}




Python 3 소스코드


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

n, m = map(int, input().split())
for k in combinations(sorted(list(map(int, input().split()))), m):
    print(' '.join(map(str, k))+'\n')


✓ C++에서 구현한 방법과 마찬가지로 구현할 수 있지만, 조합(Combination) 방법으로 풀 수 있다.

✓ 파이썬은 itertools의 combinations를 이용하면 간단하다.




참고



반응형