https://www.acmicpc.net/problem/5568
풀이과정
처음으로 set을 사용해봤다.
map을 사용하지 않고, set을 사용한 이유는 중복되는 값을 삭제해야 되기 때문이다.
이것이 set의 가장 큰 메리트라고 생각한다. 좋은 문제인 것 같다!
next_permutation
- 현재 나와있는 수열에서 인자로 넘어간 범위에 해당하는 다음 순열을 구한다.
- 사전식으로 정렬한다.
- 사용 전에 꼭 sort하고 시작해야 한다.
#include <vector>
#include <algorithm>
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
int n, k;
cin >> n >> k;
vector <int> v;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
v.push_back(x);
}
sort(v.begin(), v.end());
// next_permutation을 사용하기 전 정렬을 해줘야함
set <string> s;
do {
string res;
for (int i = 0; i < k; i++) {
res += to_string(v[i]);
}
s.insert(res);
} while (next_permutation(v.begin(), v.end()));
cout << s.size();
}
'🍞 Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 2910 빈도 정렬 c++ (0) | 2022.09.14 |
---|---|
[백준] 17219 비밀번호 찾기 c++ (0) | 2022.09.14 |
[백준] 14425 문자열 집합 c++ (0) | 2022.09.13 |
[백준] 1620 나는야 포켓몬 마스터 이다솜 c++ (0) | 2022.09.13 |
[백준] 1302 베스트셀러 c++ (0) | 2022.09.13 |