반응형
https://www.acmicpc.net/problem/5568
순열문제였습니다.
풀이방법
1. 자기자신을 뽑지 않으면서 순서 상관있도록 뽑으면됩니다.
2. 카드를 뽑았으면 카드들을 나열한 뒤 set에 넣어줍니다.
3. set의 size를 출력합니다.
Code
#include <bits/stdc++.h>
using namespace std;
int n,k;
vector <string> card;
set <string> cardSet;
vector <string> tmp;
int ck[11];
void dfs(int depth){
if(depth == k){
string c;
for(auto t : tmp) c += t;
cardSet.insert(c);
return;
}
for(int i = 0; i < n; i++){
if(ck[i]) continue;
ck[i] = 1;
tmp.push_back(card[i]);
dfs(depth + 1);
tmp.pop_back();
ck[i] = 0;
}
}
int main(){
cin >> n >> k;
for(int i = 0; i < n; i++){
string s;
cin >> s;
card.push_back(s);
}
dfs(0);
cout << cardSet.size() << '\n';
}
'Algorithm > DFS' 카테고리의 다른 글
(C++) - 백준(BOJ) 17478번 : 재귀함수가 뭔가요? (0) | 2021.08.23 |
---|---|
(C++) - 백준(BOJ) 20166번 : 문자열 지옥에 빠진 호석 (0) | 2021.08.17 |
(C++) - 백준(BOJ) 2580번 : 스도쿠 (0) | 2021.07.05 |
(C++) - 프로그래머스(2021 Dev-Matching: 웹 백엔드 개발자) : 다단계 칫솔 판매 (0) | 2021.07.01 |
(C++) - 프로그래머스(2017 카카오 코드 본선) : 단체사진 찍기 (0) | 2021.05.10 |