컴굥일지
[BOJ/백준 15664][C++] N과 M (12) 본문
반응형
문제
https://www.acmicpc.net/problem/15666
문제 내용
입력받은 N개의 자연수 중에 M개를 골라 수열을 만들어 출력하면 된다.
이때 수열을 사전순으로 증가하는 순서대로 출력해야 하며, 수열이 중복되면 안 된다.
입력받은 N개의 자연수 중에 고르는 수는 서로 중복이어도 상관없으나, 비내림차순 수열이어야 한다
길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.
문제 풀이
N과 M (11)과 다르게 N과 M (12)는 수열이 비내림차순이어야 한다는 조건이 추가되었다.
따라서, N과 M (10)처럼 이전에 어떤 값을 선택했는지도 같이 인자로 넘겨주어야 한다.
또한, N과 M (11)처럼 원소의 중복을 허용하기 때문에 used 배열을 쓸 이유가 없다.
코드
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int n, m;
vector<int> arr;
vector<int> result(8, 0);
void back(int cnt, int before_idx) {
if (cnt == m) {
for (int i = 0; i < m; i++) {
cout << result[i] << ' ';
}
cout << '\n';
return;
}
int check_duplicate = -1;
for (int i = before_idx; i < n; i++) {
if (check_duplicate != arr[i]) {
check_duplicate = arr[i];
result[cnt] = arr[i];
back(cnt + 1, i);
}
}
}
int main() {
cin >> n >> m;
arr.assign(n, 0);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr.begin(), arr.end());
back(0, 0);
}
반응형
'알고리즘 > 코테 문제' 카테고리의 다른 글
[BOJ/백준 7562][C++] 나이트의 이동 (0) | 2023.07.19 |
---|---|
[BOJ/백준 6603][C++] 로또 (0) | 2023.07.19 |
[BOJ/백준 15665][C++] N과 M (11) (0) | 2023.07.17 |
[BOJ/백준 15664][C++] N과 M (10) (0) | 2023.07.17 |
[BOJ/백준 15663][C++] N과 M (9) (0) | 2023.07.16 |
Comments