Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Kotlin in action 5장
- 백준 13460 Python
- Kotlin
- 코틀린인액션
- 고급매핑
- 20055
- 스프링 핵심 원리 - 기본편
- 백준 20055 컨베이어 벨트 위의 로봇
- 객체 지향 설계와 스프링
- 스프링 컨테이너와 스프링 빈
- Kotlin In Action
- 컨베이어 벨트 위의 로봇 Python
- Kotlin in action 10장
- KotlinInAction
- kotlin in action 정리
- 백준
- spring
- Kotlin in action 6장
- 7장 고급매핑
- 기능개발 python
- 코틀린
- 코틸린인액션
- 싱글톤 컨테이너
- Kotlin in action 3장
- 스프링 핵심 원리
- 13460 구슬탈출 2
- 20055 컨베이어 벨트 위의 로봇
- 자바 ORM 표준 JPA 프로그래밍 7장
- 스프링 핵심 원리 이해
- Python
Archives
- Today
- Total
기록하는 습관
[C++] 순열과 조합 본문
1. 조합
STL함수 next_permutation을 활용한 조합 구현
void combinationSTL(vector<int> set, int n, int r) {
for (int j = 0; j < n - r; ++j)
set.push_back(0);
for (int j = 0; j < r; ++j)
set.push_back(1);
do {
for (int j = 0; j < n; ++j)
if (set[j])
printf("%d ", j);
printf("\n");
} while (next_permutation(set.begin(), set.end()));
}
재귀함수를 활용한 조합 구현
#include<iostream>
#define MAX 5
using namespace std;
int Arr[MAX];
bool Select[MAX];
void Print()
{
for (int i = 0; i < MAX; i++)
{
if (Select[i] == true)
{
cout << Arr[i] << " ";
}
}
cout << endl;
}
void DFS(int Idx, int Cnt)
{
if (Cnt == 3)
{
Print();
return;
}
for (int i = Idx; i < MAX; i++)
{
if (Select[i] == true) continue;
Select[i] = true;
DFS(i, Cnt + 1);
Select[i] = false;
}
}
2. 순열
STL함수 next_permutation을 활용한 순열 구현
/*
순열은 초기화가 필요하다.
for (int i = 0; i < n; ++i)
set.push_back(i);
*/
void permutationSTL(vector<int> set, int n, int r) {
do {
for (int i = 0; i < r; ++i)
printf("%d ", set[i]);
printf("\n");
} while (next_permutation(set.begin(), set.end()));
}
재귀함수를 활용한 순열 구현
#include<iostream>
#include<vector>
#define MAX 5
using namespace std;
int Arr[MAX];
bool Select[MAX];
vector<int> V;
void Print()
{
for (int i = 0; i < V.size(); i++)
{
cout << V[i] << " ";
}
cout << endl;
}
void DFS(int Cnt)
{
if (Cnt == 3)
{
Print();
return;
}
for (int i = 0; i < MAX; i++)
{
if (Select[i] == true) continue;
Select[i] = true;
V.push_back(Arr[i]);
DFS(Cnt + 1);
V.pop_back();
Select[i] = false;
}
}
순열과 조합의 재귀 코드를 완전히 이해하는 것은 시간이 걸릴 듯 하다..
오늘은 전반적인 코드 이해로 만족해야겠다.
참고 블로그 : https://yabmoons.tistory.com/100?category=838490
'알고리즘 > [개념] C++' 카테고리의 다른 글
[c++] 여러개의 숫자 한줄로 받아 따로 저장하기 (0) | 2020.05.08 |
---|---|
[C++] memset (0) | 2020.01.21 |
[C++] Range-based for statement (0) | 2020.01.08 |
[C++] STL 정리 (0) | 2020.01.05 |
[C++] vector & deque (0) | 2020.01.05 |
Comments