Skip to content

Commit

Permalink
[Silver III] Title: N과 M (8), Time: 4 ms, Memory: 2024 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
ffvv0123 committed Aug 24, 2024
1 parent e5bb109 commit 046eb73
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 0 deletions.
40 changes: 40 additions & 0 deletions 백준/Silver/15657. N과 M (8)/N과 M (8).cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int N, M, x;
vector<int> seq, answer;

void dfs() {
if (answer.size() == M) {
for (int num : answer) cout << num << " ";
cout << '\n';
return;
}

for(int i=0; i < N; i++) {
if (answer.empty() || answer.back() <= seq[i]) {
answer.push_back(seq[i]);
dfs();
answer.pop_back();
}
}
return;
}

int main() {
ios::sync_with_stdio(false);
cin.tie(0);

cin >> N >> M;
for(int i=0; i < N; i++) {
cin >> x;
seq.push_back(x);
}
sort(seq.begin(), seq.end());

dfs();

return 0;
}
42 changes: 42 additions & 0 deletions 백준/Silver/15657. N과 M (8)/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# [Silver III] N과 M (8) - 15657

[문제 링크](https://www.acmicpc.net/problem/15657)

### 성능 요약

메모리: 2024 KB, 시간: 4 ms

### 분류

백트래킹

### 제출 일자

2024년 8월 25일 05:27:13

### 문제 설명

<p>N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.</p>

<ul>
<li>N개의 자연수 중에서 M개를 고른 수열</li>
<li>같은 수를 여러 번 골라도 된다.</li>
<li>고른 수열은 비내림차순이어야 한다.
<ul>
<li>길이가 K인 수열 A가 A<sub>1</sub> ≤ A<sub>2</sub> ≤ ... ≤ A<sub>K-1</sub> ≤ A<sub>K</sub>를 만족하면, 비내림차순이라고 한다.</li>
</ul>
</li>
</ul>

### 입력

<p>첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)</p>

<p>둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.</p>

### 출력

<p>한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.</p>

<p>수열은 사전 순으로 증가하는 순서로 출력해야 한다.</p>

0 comments on commit 046eb73

Please sign in to comment.