문제 정보
백준 ( BOJ ) boj 5568 카드 놓기
문제 풀이 : unordered_set, 수열
문제 출처 : https://www.acmicpc.net/problem/5568
시작 Thinking
-
가능한 모든 경우의 수 탐색 하기,
-
결과를 unoredered_set 에 넣기.
-
unordered_set 사이즈를 출력
-
모든 수 탐색하기
이건 수열관련 가장 많은 문제죠.
dfs 하듯이 구현 하면 됩니다.
visited 를 체크 해 주면서, 모든 반복문이 돌아가도록~
- unordered_set 이 부분은, 괜히 자릿수 계산해서 숫자를 바꿔가며 넣기보다는,
그냥 간단하게 string 으로 만들어서 처리하는게 좋습니다!
코드
#include <iostream>
#include <unordered_set>
#include <vector>
#include <string>
using namespace std;
int n, k;
unordered_set<string> us;
vector<int> v;
vector<int> visited;
void fun(string sum, int counter) {
if (counter != k ) {
for (int i = 0; i < n; i++) {
if (visited[i] == 0) {
visited[i] = 1;
fun(sum+ to_string(v[i]),counter+1);
visited[i] = 0;
}
}
}
else
us.insert(sum);
}
int main() {
cin >> n >> k;
v.assign(n, 0);
visited.assign(n, 0);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
fun("", 0);
cout << us.size();
return 0;
}