프로그래밍/알고리즘

    BOJ 15657 · N과 M (8)

    알고리즘 분류 : 브루트 포스 입력받은 N개의 숫자 중에서 비내림차순으로 M개를 뽑는 문제다. N과 M (4) 문제의 소스코드를 수정하면 된다. C++ 소스코드 #include #include #include using namespace std; int n, m; int a[8]; vector 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

    BOJ 15656 · N과 M (7)

    알고리즘 분류 : 브루트 포스 입력받은 N개의 숫자 중에서 중복 가능하게 M개를 뽑는 문제다. N과 M (3) 문제의 소스코드를 조금 수정하면 된다. C++ 소스코드 #include #include #include using namespace std; int n, m; int a[8]; vector v; void solve(int cnt) { if (cnt == m) { for (auto k : v) printf("%d ", k); printf("\n"); return; } for (int i=0; i

    BOJ 15655 · N과 M (6)

    알고리즘 분류 : 브루트 포스 입력받은 N개의 숫자 중에서 M개를 오름차순으로 뽑는 문제다. N과 M (2) 문제의 소스코드를 수정하면 된다. C++ 소스코드 #include #include #include using namespace std; int n, m; int a[8]; vector 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

    BOJ 15654 · N과 M (5)

    알고리즘 분류 : 브루트 포스 N개의 숫자를 입력받고, 그 숫자 중에서 M개를 뽑아서 출력하는 문제다. N과 M (1)의 소스코드를 살짝 수정하면 된다. N과 M (1)에서는 1~N까지의 숫자를 사용했으니, 이번에는 배열에 있는 N개의 숫자를 사용하면 된다. C++ 소스코드 #include #include #include using namespace std; int n, m; int a[8]; bool check[8]; vector v; void solve(int cnt) { if (cnt == m) { for (auto k : v) printf("%d ", k); printf("\n"); return; } for (int i=0; i

    BOJ 15652 · N과 M (4)

    알고리즘 분류 : 브루트 포스 N개의 숫자 중에서 M개를 뽑는 문제다. 단, 같은 수를 여러 번 뽑아도 되며, 고른 숫자는 비내림차순이어야 한다. N과 M (2) 문제의 코드에서 시작 지점을 수정하면 된다. 시작 지점은 이전에 뽑은 숫자이다. 재귀 함수 호출에 전달할 값을 사용한 숫자와 똑같이 보내면 된다. C++ 소스코드 #include #include using namespace std; int n, m, x; vector a; void solve(int index, int cnt) { if (cnt == m) { for (auto i : a) printf("%d ", i+1); printf("\n"); return; } for (int i=index; i

    BOJ 15651 · N과 M (3)

    알고리즘 분류 : 브루트 포스 N개의 숫자 중에서 M개를 뽑는 문제다. 숫자를 뽑을 때 같은 수를 여러번 골라도 된다. 이 문제는 N과 M (1) 문제의 소스코드에서 check 배열만 사용하지 않으면 된다. C++ 소스코드 #include #include using namespace std; int n, m, x; vector a; void solve(int cnt) { if (cnt == m) { for (auto i : a) printf("%d ", i+1); printf("\n"); return; } for (int i=0; i

    BOJ 15650 · N과 M (2)

    알고리즘 분류 : 브루트 포스 N개의 숫자 중에서 M개를 뽑아서 출력하는 문제다. 단, 중복된 수열이 없어야 하고, 오름차 순으로 출력해야 한다. N과 M (1)의 코드에서 for문의 시작 지점을 수정하면 된다. 시작 지점은 이전에 뽑은 숫자+1 이다. 숫자+1을 다음 재귀 함수 호출에 전달하면 된다. C++ 소스코드 #include #include using namespace std; int n, m, x; vector a; void solve(int index, int cnt) { if (cnt == m) { for (auto i : a) printf("%d ", i+1); printf("\n"); return; } for (int i=index; i

    BOJ 15649 · N과 M (1)

    알고리즘 분류 : 브루트 포스 N개의 숫자 중에서, M개만 뽑아서 출력하는 문제다. 재귀 함수를 이용하여 구현할 수 있다. 사용 여부를 확인할 배열 check를 N 사이즈로 만들어둔다.1부터 N까지 재귀 함수를 호출한다. 숫자 X를 사용했으면, check[X]를 true로 한다.check가 true라면 재귀 함수를 호출하지 않고 넘어간다.사용한 숫자를 리스트에 담아두고, 리스트의 길이가 M이 되면 리스트를 출력한다. C++ 소스코드 #include #include using namespace std; int n, m; bool check[8]; vector a; void solve(int cnt) { if (cnt == m) { for (auto i : a) printf("%d ", i+1); print..