-
[백준 문제집] N과 M (시리즈)C 프로그래밍/BOJ 2022. 9. 8. 23:15728x90
https://www.acmicpc.net/workbook/view/2052
[백준 15649] N과 M (1)
// 순열 #include <cstdio> int N, M; bool flag[8 + 2]; int choice[8 + 2]; void Permu(int n) { if (n == M) { for (int i = 0; i < M; i++) printf("%d ", choice[i]); printf("\n"); return; } for (int i = 1; i <= N; i++) { if (flag[i]) continue; choice[n] = i; flag[i] = true; Permu(n + 1); flag[i] = false; } } int main() { scanf("%d %d", &N, &M); Permu(0); return 0; }
[백준 15650] N과 M (2)
// 조합 #include <cstdio> int N, M; int choice[8 + 2]; void Combi(int n, int s) { if (n == M) { for (int i = 0; i < M; i++) printf("%d ", choice[i]); printf("\n"); return; } for (int i = s; i <= N; i++) { choice[n] = i; Combi(n + 1, i + 1); } } int main() { scanf("%d %d", &N, &M); Combi(0, 1); //0번째 뎁스, 1부터 시작 return 0; }
[백준 15651] N과 M (3)
#include <cstdio> int N, M; int choice[7 + 2]; void Rep_Permu(int n) { if (n == M) { for (int i = 0; i < M; i++) printf("%d ", choice[i]); printf("\n"); return; } for (int i = 1; i <= N; i++) { choice[n] = i; Rep_Permu(n + 1); } } int main() { scanf("%d %d", &N, &M); Rep_Permu(0); return 0; }
[백준 15652] N과 M (4)
// 중복조합 #include <cstdio> int N, M; int choice[8 + 2]; void Rep_Combi(int n, int s) { if (n == M) { for (int i = 0; i < M; i++) printf("%d ", choice[i]); printf("\n"); return; } for (int i = s; i <= N; i++) { choice[n] = i; Rep_Combi(n + 1, i); } } int main() { scanf("%d %d", &N, &M); Rep_Combi(0, 1); // 0번째 뎁스, 1번 부터 고른다 return 0; }
[백준 15654] N과 M (5)
// 순열 #include <cstdio> #include <algorithm> int N, M; int num[8 + 2]; int choice[8 + 2]; bool flag[8 + 2]; void input(void) { scanf("%d %d", &N, &M); for (int i = 0; i < N; i++) scanf("%d", &num[i]); // 오름차순 정렬 std::sort(num, num + N); } void Permu(int n) { if (n == M) { for (int i = 0; i < M; i++) printf("%d ", choice[i]); printf("\n"); return; } for (int i = 0; i < N; i++) { if (flag[i]) continue; choice[n] = num[i]; flag[i] = true; Permu(n + 1); flag[i] = false; } } int main() { input(); Permu(0); return 0; }
[백준 15655] N과 M (6)
// 조합 #include <cstdio> #include <algorithm> int N, M; int num[8 + 2]; int choice[8 + 2]; void input(void) { scanf("%d %d", &N, &M); for (int i = 0; i < N; i++) scanf("%d", &num[i]); // 오름차순 정렬 std::sort(num, num + N); } void Combi(int n, int s) { if (n == M) { for (int i = 0; i < M; i++) printf("%d ", choice[i]); printf("\n"); return; } for (int i = s; i < N; i++) { choice[n] = num[i]; Combi(n + 1, i + 1); } } int main() { input(); Combi(0, 0); // 0번째 뎁스, 0번째 인덱스 return 0; }
[백준 15656] N과 M (7)
// 중복순열 #include <cstdio> #include <algorithm> int N, M; int num[7 + 2]; int choice[7 + 2]; void input(void) { scanf("%d %d", &N, &M); for (int i = 0; i < N; i++) scanf("%d", &num[i]); // 오름차순 정렬 std::sort(num, num + N); } void Rep_Permu(int n) { if (n == M) { for (int i = 0; i < M; i++) printf("%d ", choice[i]); printf("\n"); return; } for (int i = 0; i < N; i++) { choice[n] = num[i]; Rep_Permu(n + 1); } } int main() { input(); Rep_Permu(0); return 0; }
[백준 15657] N과 M (8)
// 중복조합 #include <cstdio> #include <algorithm> int N, M; int num[8 + 2]; int choice[8 + 2]; void input(void) { scanf("%d %d", &N, &M); for (int i = 0; i < N; i++) scanf("%d", &num[i]); // 오름차순 정렬 std::sort(num, num + N); } void Rep_Combi(int n, int s) { if (n == M) { for (int i = 0; i < M; i++) printf("%d ", choice[i]); printf("\n"); return; } for (int i = s; i < N; i++) { choice[n] = num[i]; Rep_Combi(n + 1, i); } } int main() { input(); Rep_Combi(0, 0); return 0; }
728x90'C 프로그래밍 > BOJ' 카테고리의 다른 글
[백준 13913] 숨바꼭질 4 (0) 2022.09.09 [백준 14226] 이모티콘 (0) 2022.09.09 [백준 4485] 녹색 옷 입은 애가 젤다지? (0) 2022.09.08 [백준 2961] 도영이가 만든 맛있는 음식 (0) 2022.09.07 [백준 1398] 케빈 베이컨의 6단계 법칙 (0) 2022.09.06