-
[15665] N과 M (11)BOJ 2021. 11. 29. 13:41
https://www.acmicpc.net/problem/15665
15665번: N과 M (11)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
<문제>
중복을 제거하기 위해 set<vector<int>>를 사용한다.
set 자체가 정렬이 되므로 입력받을때에 정렬하는 부분(25라인)은 꼭 필요한 부분은 아니다.
<소스코드>
1234567891011121314151617181920212223242526272829303132#include <bits/stdc++.h>using namespace std;int n, m;vector<int> v;set<vector<int>> s;int cur[7];void f(int d) {int i, j;if (d == m) {vector<int> temp(m);for (i = 0; i < m; i++) temp[i] = cur[i];s.insert(temp);return;}for (i = 0; i < n; i++) {cur[d] = v[i];f(d + 1);}}int main(void) {cin >> n >> m;v.resize(n);int i;for (i = 0; i < n; i++) cin >> v[i];sort(v.begin(), v.end());f(0);for (auto& i : s) {for (auto& j : i) cout << j << " ";cout << '\n';}return 0;}cs 'BOJ' 카테고리의 다른 글
[6590] 덧셈 체인 (0) 2021.11.30 [11023] 더하기 3 (0) 2021.11.29 [15656] N과 M (7) (0) 2021.11.29 [15664] N과 M (10) (0) 2021.11.29 [1253] 좋다 (0) 2021.11.28