1. ์์ด(Permutation)
์์๋ฅผ ๋ฐ์ง๊ณ , ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค. (์์O, ์ค๋ณตX)
๋ฐฑ์ค ๊ด๋ จ ๋ฌธ์ : ๋ชจ๋ ์์ด
-> ๋ฐฑํธ๋ํน ๋ฌธ์ , visit ๋ฐฐ์ด์ ๋ฌ ์ค๋ณต์ ๊ฒ์ฌํ๋ค. ์ฌ๊ท๋ฅผ ์ด์ฉํด ๋ค๋ฅธ ์์์ ๋ํด ๋๊ฐ์ด ์ํํ๋ค.
c++ ์ฝ๋ :
//
// 10974_all_ permutation.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/02/27.
//
#include <stdio.h>
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
vector<int> v;
bool visit[9];
int n;
///<algorithm> -> next_permutation(์์ด ์์, ์์ด ๋)
/// with recursive
void make_permu_dfs(){
if(v.size() == n){
for(int i = 0; i < n; i++){
cout << v.at(i) << " ";
}
cout << endl;
return;
}else{
for(int i = 1; i <= n; i++){
if(visit[i] == false){
visit[i] = true;
v.push_back(i);
make_permu_dfs();
v.pop_back();
visit[i] = false;
}
}
}
}
int main(){
cin >> n;
memset(visit, false, sizeof(visit));
make_permu_dfs();
return 0;
}
2. ์กฐํฉ(Combination)
์ฃผ๋จธ๋์์ ๊ณต์ ์ฌ๋ฌ๊ฐ ๋ฝ๋๊ฒ๊ณผ ๊ฐ๋ค. ์์ด๊ณผ ๋ค๋ฅด๊ฒ ์์๋ ์ค์ํ์ง ์๋ค.
๋ฐฑ์ค ๊ด๋ จ ๋ฌธ์ : N๊ณผM(1)
-> ์์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก visit ๋ฐฐ์ด์ ๋ฌ ์ค๋ณต์ ๊ฒ์ฌํ๋ค. ํ์ฌ ์์ ์งํฉ์ ํด๋น ์์๊ฐ ์๋ค๋ฉด ๊ฑด๋๋ด๋ค. (set์ ์ฌ์ฉํด๋ ๋ ๊ฑฐ ๊ฐ๋ค)
c++ ์ฝ๋ :
//
// 15649_N&M.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/09/10.
//
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N, M;
vector<int> v;
int visit[9] = { false, };
vector<int>::iterator it;
//combination
void make_dfs(){
if(v.size() == M){
for(int i = 0; i < M; i++){
cout << v[i] << " ";
}
cout << '\n';
return;
}else {
for(int j = 1; j <= N; j++){
if(visit[j] == false){
if(find(v.begin(), v.end(), j) != v.end()) { continue; }
visit[j] = true;
v.push_back(j);
make_dfs();
v.pop_back();
visit[j] = false;
}
}
}
}
int main(){
cin >> N >> M;
make_dfs();
return 0;
}
3. ์ค๋ณต ์์ด
์์๊ฐ ์๋ ์์ด์์ ์์ ์ค๋ณต์ ํ์ฉํ๋ค.
๋ฐฑ์ค ๊ด๋ จ ๋ฌธ์ : N๊ณผM(3)
-> ์ค๋ณต์ ํ์ฉํ๋ฏ๋ก ๋ฐ๋ก visit ๋ฐฐ์ด์ ๋์ง ์๋๋ค.
c++ ์ฝ๋ :
//
// 15651_N&M(3).cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2022/02/20.
//
#include <iostream>
using namespace std;
int N, M;
int arr[8];
//์ค๋ณต ์์ด
void backTracking(int cnt){
if(cnt == M){ // M๊ฐ ๋ค ๊ณจ๋๋ค๋ฉด
for(int i = 0; i < M; i++){
cout << arr[i] << ' ';
}
cout << '\n';
return;
}
for(int i = 1; i <= N; i++){
arr[cnt] = i;
backTracking(cnt+1);
}
}
int main(){
cin >> N >> M;
backTracking(0);
return 0;
}
4. ์ค๋ณต ์กฐํฉ
์ค๋ณตํด์ ๊ฐ์ ์์๋ฅผ ๋ฝ์ ์ ์๋ค.
๋ฐฑ์ค ๊ด๋ จ ๋ฌธ์ : N๊ณผM(4)
-> ์ค๋ณต ์์ด๊ณผ ๋ค๋ฅด๊ฒ num ๋งค๊ฐ๋ณ์๋ฅผ ๋ฌ์ ์ด์ ์ ์์ํ ์์๋ถํฐ ๋ค์ ์ฌ๊ท๋ฅผ ํธ์ถํ๋ค.
c++ ์ฝ๋ :
//
// 15652_N&M(4).cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2022/02/20.
//
#include <iostream>
using namespace std;
int N, M;
int arr[8];
//์ค๋ณต ํ์ฉ + ์ฆ๊ฐํ๋ ์
void backTracking(int cnt, int num){
if(cnt == M){
//์ถ๋ ฅ
for(int i =0; i < M; i++){
cout << arr[i] << " ";
}
cout << '\n';
return;
}
for(int i = num; i <= N; i++){
arr[cnt] = i;
backTracking(cnt + 1, i); // num, i ์ฐจ์ด
}
}
int main(){
cin >> N >> M;
backTracking(0, 1);
return 0;
}
'Algorithm๐ฐ > STL๊ณผ BASIC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift TIP ์ ๋ฆฌ.zip (0) | 2022.02.18 |
---|
๋๊ธ