๋ก๋(๋ฌธ์ _ 6603)
๋ ์ผ ๋ก๋๋ {1, 2, ..., 49}์์ ์ 6๊ฐ๋ฅผ ๊ณ ๋ฅธ๋ค.
๋ก๋ ๋ฒํธ๋ฅผ ์ ํํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ฅ ์ ๋ช ํ ์ ๋ต์ 49๊ฐ์ง ์ ์ค k(k>6)๊ฐ์ ์๋ฅผ ๊ณจ๋ผ ์งํฉ S๋ฅผ ๋ง๋ ๋ค์ ๊ทธ ์๋ง ๊ฐ์ง๊ณ ๋ฒํธ๋ฅผ ์ ํํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, k=8, S={1,2,3,5,8,13,21,34}์ธ ๊ฒฝ์ฐ ์ด ์งํฉ S์์ ์๋ฅผ ๊ณ ๋ฅผ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ์ด 28๊ฐ์ง์ด๋ค. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ..., [3,5,8,13,21,34])
์งํฉ S์ k๊ฐ ์ฃผ์ด์ก์ ๋, ์๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์
๋ ฅ
์
๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ
์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ํ
์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ฒซ ๋ฒ์งธ ์๋ k (6 < k < 13)์ด๊ณ , ๋ค์ k๊ฐ ์๋ ์งํฉ S์ ํฌํจ๋๋ ์์ด๋ค. S์ ์์๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ฃผ์ด์ง๋ค.
์ ๋ ฅ์ ๋ง์ง๋ง ์ค์๋ 0์ด ํ๋ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ
์คํธ ์ผ์ด์ค๋ง๋ค ์๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ถ๋ ฅํ๋ค. ์ด๋, ์ฌ์ ์์ผ๋ก ์ถ๋ ฅํ๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค ์ฌ์ด์๋ ๋น ์ค์ ํ๋ ์ถ๋ ฅํ๋ค.
์์
7 1 2 3 4 5 6 7
0
answer :
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7
ํ์ด
n๊ณผ m ๋ฌธ์ ๋ฅผ ๋ค ํ์๋ค๋ฉด ๊ฐ๋จํ ํด๊ฒฐํ ์ ์๋ ์ ํ์ ๋ฌธ์ ์ด๋ค.
n๊ณผ m ๋ฌธ์ ์ง ๋งํฌ https://www.acmicpc.net/workbook/view/2052
๋ฐฑํธ๋ํน์ ์ด์ฉํด n(k)์ ์ซ์์์ m(6)๊ฐ๋ฅผ ๋ฝ์๋ด๋ ํ์์ ๋ฌธ์ ์ด๋ค.
์ด๋ ๋ชจ๋ ์์ด์ ์ฌ์ ์์ผ๋ก ์ถ๋ ฅ๋์ด์ผ ํ๊ณ , ๋น ๋ด๋ฆผ์ฐจ์์ด์ด์ผ ํ๋ ์กฐ๊ฑด์ด ์๋ค.
-
์ฌ์ ์ ์ถ๋ ฅ : vector datas๊ฐ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๋์ด์์ด์ผ ํ๋ค -> ์ ๋ ฅ์ด ์ค๋ฆ์ฐจ์์ผ๋ก ๋ค์ด์์ ํด๊ฒฐ
-
๋น ๋ด๋ฆผ์ฐจ์ : ์์ด์ ๊ฐ์ ๋ฃ์ ๋, ์ด๋ฏธ ๋ค์ด์ ์๋ ๊ฐ๋ณด๋ค ํฐ ๊ฐ๋ง ๋ฃ๋๋ค
if (k == 0 || arr[k - 1] < next)
-
์์๊ฐ ๋ค๋ฅด์ง๋ง ๊ฐ์ ๊ฐ์ ๊ฐ์ง ์์ด์ ๊ฐ์ ์์ด : bool isused[] ์ ์ด์ฉํด ์ด๋ฏธ ์ฌ์ฉํ ๊ฐ์ ์์ด์ ๋ฃ์ง ์๋๋ค.
์ฝ๋
bool isused[50];
int arr[6];
vector<int> datas;
void func(int k) {
if (k == 6) { // 6๊ฐ๋ฅผ ๋ฝ์๋ค๋ฉด ์ถ๋ ฅํ๋ค
for (int i = 0; i < 6; i++) {
cout << arr[i] << " ";
}
cout << '\n';
return;
}
for (int i = 0; i < datas.size(); i++) {
int next = datas[i]; // ๋ฝ์ ์
if (!isused[next]) { // ์์ง ์์ด์ ์ฌ์ฉํ์ง ์์๋ค๋ฉด
if (k == 0 || arr[k - 1] < next) { // ๋น ๋ด๋ฆผ์ฐจ์ ์กฐ๊ฑด
arr[k] = next; // ์์ด์ ๋ฃ๋๋ค
isused[next] = true; // ์ฌ์ฉํ๋ค๊ณ ํ์ํ๋ค
func(k + 1); // ๋ค์ ์ซ์๋ฅผ ๋ฝ์ผ๋ฌ ๊ฐ๋ค
isused[next] = false; // ๋์ด์ ์ฌ์ฉํ์ง ์๋๋ค
}
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int k;
do{
cin >> k;
int tmp;
for (int i = 0; i < k; i++) {
cin >> tmp;
datas.push_back(tmp);
}
// n๊ฐ์์ m๊ฐ ๋ฝ๊ธฐ. ๋น ๋ด๋ฆผ์ฐจ์
// ๊ฐ์ ์์ด ์ฌ๋ฌ๋ฒ ์ถ๋ ฅ ๋ถ๊ฐ
func(0);
// ์ฌ์ฉํ ๋ฐฐ์ด๋ค ์ด๊ธฐํ
datas.clear();
memset(arr, 0, sizeof(arr));
memset(isused, false, sizeof(isused));
cout << '\n'; // ๊ฐ ์ผ์ด์ค ์ฌ์ด์๋ ๋น ์ค์ ์ถ๋ ฅํ๋ค.
} while (k != 0); // k๊ฐ 0์ด๋ผ๋ฉด ๊ทธ๋งํ๋ค.
}
private static void func(int cur, int idx) {
if (cur == 6) {
for (int i = 0; i < 6; i++) {
sb.append(result[i]).append(" ");
}
sb.append("\n");
return;
}
for (int i = idx; i < n; i++) {
result[cur] = arr[i];
func(cur + 1, i + 1);
}
}