
๋ชฉ์ฐจ
0. ์๋ก
1. ๋ฌธ์ ๋ฐฉํฅ
2. ์ฝ๋
0. ์๋ก
์ ํ์๊ฐ 1์ด
๋ฉ๋ชจ๋ฆฌ 512MB
๋ฌธ์
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
์ ๋ ฅ
์ฒซ์งธ ์ค์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ M ≤ N ≤ 8)
๋์งธ ์ค์ N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๊น์ง๊ฐ ๋ฌธ์ ๋ค. ํ์๊ฐ ํธ๋ ์์ ์์๋ ์ค๋ฒ2์๋ค.
์ญ์ N๊ณผ M ์๋ฆฌ์ฆ๋, ๊ณจ๋ ์ดํ์ ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ์ ํฐ ๋ฐ๋์์ด ๋๋ ๋ฌธ์ ๋ค์ด ๋ง๋ค.
์ด ๋ฌธ์ ๋ํ ๊ทธ๋ฌ๋ค.
1. ๋ฌธ์ ๋ฐฉํฅ
ํ์์ ์๊ฐ ํ๋ฆ์ด ๊ถ๊ธํ์ง ์๊ณ , ๋ฌธ์ ํธ๋ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํ๋ค๋ฉด ์๋์ ๊บพ์ด์ง ๊ตฌ๋ถ์ ์๋๋ถํฐ ๋ณด๋ฉด ๋๋ค.
์ฒ์์ ์ด ๋ฌธ์ ๋ฅผ ์ ๊ทผํ ๋, "์ค๋ณต๋๊ณ ์ฐ์๋์ง ์์ ์"๊ฐ ์ฃผ์ด์ง๋ฉด์ "์์ด์ด ์ค๋ณต๋์ง ์์์ผ ํ๋ค"๊ฐ ์ด๋ป๊ฒ ํ์ด์ผ ํ ์ง ๊ฐ์ด ์์กํ๋ค. ์ฐ์ N๊ณผ M์ 8๋ณด๋ค ์๊ธฐ์ ์๊ฐ ๊ทธ๋ฆฌ ํฌ์ง ์๊ธฐ์, ๊ฐ ์๋ฆฌ๋ณ๋ก ๊ฐ์๋ฅผ ๋ฉ์ด๊ณ ๋ถ๋ฐฐํ ๋ ค ํ๋๋ ๊ทธ๋ผ ์ถ๋ ฅ์ ๋ชจ๋ ๊ธฐ๋กํ๊ณ ํ์ธํด์ผ๋ง ๋์ผํ ์ถ๋ ฅ์ธ์ง ์๋์ง ์ ์ ์์ ๋ฏ ํ๋ค.
๊ทธ๋ผ dfs์ฒ๋ผ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ์ ๊ฑธ ๋, ์ค๋ณต๋๋ ์ซ์๋ฅผ ์ด๋ป๊ฒ ์ ๊ฑฐํ ์ ์์์ง ์๊ฐํด ๋ณด์๋ค.
์ฐ์ , ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๋ ฅ์ด "์ฆ๊ฐํ๋ ์ฌ์ ์"์ด๊ธฐ ๋๋ฌธ์, ์ ๋ ฅ๋ฐ์ ํ ์ด๋ธ์ ๋ชจ๋ sort๋ฅผ ํด์ค์ผ ํ๋ค.
๊ฒน์น๋ ๊ฒฝ์ฐ 1)

๋ง์ผ M์ด 2์ด๊ณ , ์์ ๊ฐ์ด ํ ์ด๋ธ์ด ์ฃผ์ด์ก๋ค๊ณ ํ์ ๋, ์ฒซ ๋ฒ์งธ ์ฌ๊ท์์ ์ฒซ ๋ฒ์งธ ์ซ์์ธ 1์ ๊ณ ๋ฅธ ํ, ๋ค์ ์ฌ๊ท๋ก ๋์ด๊ฐ๋ค๋ฉด

์ฒ๋ผ [1 9]๊ฐ ๊ฒน์น๊ฒ ๋๋ค.
๊ฒน์น๋ ๊ฒฝ์ฐ 2)
๋ค ๋ฒ์งธ์ธ 9๋ฅผ ์ก์์ ๋,

"๋ณธ์ธ"์ธ 9๋ ๋๊ฒผ์ง๋ง, "๋ณธ์ธ ๋ค์"์ ํด๋นํ๋ ๊ฐ์ ์ 9๋ฅผ ๋๋ค์ ์ง๋ ๊ฒฝ์ฐ๋ [9 9]๊ฐ ์ค๋ณตํด์ ๋ฐ์ํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์ฌ๊ธฐ์ ๋ง์ฝ [9 9]๋ฅผ ํ๋ฒ๋ง ์ถ๋ ฅํ๊ฒ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด๋ฉด, ๋ค์์ ๊ฒน์น๋ ๊ฒฝ์ฐ3์์ ๋ ๊ฒน์น ์ ์๊ฒ๋๋ค.
๊ฒน์น๋ ๊ฒฝ์ฐ 3)

์์์ [9 9]๋ฅผ print ํ์ง๋ง, ๋ค์ฏ ๋ฒ์งธ์ 9๋ฅผ ์ง๊ฒ ๋๋ฉด, ์์ ์ถ๋ ฅํ [9 9]๊ฐ ๋ ์ถ๋ ฅ๋๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ํด๊ฒฐ
์ฝ๋๋ฅผ ๋ณด๊ณ ์ถ์ ์ฌ๋์ ๊ทธ๋ฅ ๋ค์ index๋ก ๋์ด๊ฐ๋ฉด ๋๋ค. ํด๋น ํ์ด์ง์์๋ ๊ตฌ์กฐ์ ์ธ ๋ด์ฉ์ ๋ค๋ฃฌ๋ค.
์ฐ์ , [1 1]๊ณผ ๊ฐ์ด ์ค๋ณต๋๋ ๊ฒฝ์ฐ๋
vector<int> stack;
vector<bool> visited;
void logic(int depth) {
for(int i = 0; i < (int)depth.size(); ++i) {
if(!visited[i]) {
visited[i] = true;
logic(depth + 1);
visited[i] = false;
}
}
}
์ด๋ฐ dfs์ ๊ธฐ๋ณธ visited๊ตฌ์กฐ๋ก ํผํ ์ ์๊ณ ,
๊ฒน์น๋ ๊ฒฝ์ฐ 1,2,3์ ๋ชจ๋ ํ๊ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ๋ ์๋ค.
๊ฒน์น๊ธฐ ์ง์ ๊ณผ ๊ฒน์น ํ์ ๋์๋ค์ ํ๋ํ๋ ๋ณด๊ณ ์์๋ฉด,
"์ ์ ์ ํํ ์ ํ์ ๋ค์ ์ ํํ์ง ์๊ฒ"ํ๋ ๊ฒ ํ๋๋ง์ผ๋ก ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N,M;
vector<int> table;
vector<int> stack;
vector<bool> visited;
void init() {
int temp;
cin >> N >> M;
visited.resize(N, false);
for(int i = 0; i < N; ++i) {
cin >> temp;
table.push_back(temp);
}
sort(table.begin(), table.end());
}
์ด๋ ๊ฒ ์ ๋ ฅ์ ๋ฐ์์ค ํ,
void logic(int depth) {
if(depth >= M) {
return;
}
int bef = 0;
for(int i = 0; i < (int)table.size(); ++i) {
if(!visited[i] && table[i] != bef) {
bef = table[i];
visited[i] = true;
stack.push_back(table[i]);
logic(depth+1);
visited[i] = false;
stack.pop_back();
}
}
}
์ด๋ฐ ํ์์ผ๋ก ์ง ๋ด๋ ค๊ฐ๋ฉด ๋๋ค.
๋ฌผ๋ก ๋ณด๊ธฐ ์ฝ๊ฒ ํ๋๋ผ print ํ๋ ๋ถ๋ถ์ ์ ์ธํ๊ณ , if return ๋ถ๋ถ์ printํ๋ ๋ก์ง์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
2. ์ฝ๋

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N,M;
vector<int> table;
vector<int> stack;
vector<bool> visited;
void init() {
int temp;
cin >> N >> M;
visited.resize(N, false);
for(int i = 0; i < N; ++i) {
cin >> temp;
table.push_back(temp);
}
sort(table.begin(), table.end());
}
void logic(int depth) {
if(depth >= M) {
for(int i = 0; i < (int)stack.size(); ++i) {
cout << stack[i] << " ";
}
cout << '\n';
return;
}
int bef = 0;
for(int i = 0; i < (int)table.size(); ++i) {
if(!visited[i] && table[i] != bef) {
bef = table[i];
visited[i] = true;
stack.push_back(table[i]);
logic(depth+1);
visited[i] = false;
stack.pop_back();
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
init();
logic(0);
return 0;
}
์ ์ถ๋ ฅ ๊ฐ์์ ๊ฒฝ์ฐ 4ms๊ฐ ๋ ๋น ๋ฅด๋ค.
'SW > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฐฑ์ค] 9205๋ฒ ๋งฅ์ฃผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ - ํ๋ก์ด๋, DFS (C++) (0) | 2026.02.12 |
|---|---|
| [๋ฐฑ์ค] 11725๋ฒ ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ (C++) (1) | 2026.02.05 |
| [๋ฐฑ์ค] 11053๋ฒ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (C++) (0) | 2026.02.04 |