์ค๋ฒ2 : ์กฐํฉ ๋ฌธ์ ์ด๋ค.
ํ์ด1
๊ธฐ๋ณธ์ ์ธ ์กฐํฉ ๋ฌธ์ ์ด๋ค.
Code
import sys
from itertools import combinations
input = sys.stdin.readline
while True:
input_list = list(map(int, input().split()))
if input_list[0] == 0:
break
k, s = input_list[0], input_list[1:]
for combi in list(combinations(s, 6)):
for c in combi:
print(c, end=" ")
print()
print()
ํ์ด2
๋จ์ํ ๋ฌธ์ ์๋ค. ์ฌ๊ท๋ฅผ ํตํด ๋ง๋ค ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ ๋ฌธ์ ์๋ค. ๋ ๊ฐ์ ๊ฒฝ์ฐ ์ฌ๊ท๋ฅผ ํตํด ๋ค์ด๊ฐ ๋, ํ์ํ์ง ์์๋ ๋๋ ๋ถ๋ถ์ ๊ฑฐ๋ฅด๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ์๋ง ๋ค๋ฅธ ๋ถ๋ค๋ ์์ฑํ์ ๊ฒ์ด๋ค.
์ด ๋ฌธ์ ์์ ๊ณ ๋ คํด์ผ ๋๋ ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ด๋ป๊ฒ ์ถ๋ ฅํ๊ฒ ๋ง๋ค ๊ฒ์ธ๊ฐ?
- ์ด๋ ์ํฉ์์ ํ์์ ํ์ง ์๊ฒ ๊ฐ์ง๋ฅผ ์น ๊ฒ์ธ๊ฐ?
์ถ๋ ฅ ๋ฐฉ๋ฒ
checkbox๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค์ด ๊น์ด๊ฐ 6์ด ๋์์ ๋ ๋ชจ๋ ์ถ๋ ฅํ์๋ค.
๋ฐฑํธ๋ํน
์ด ๋ฌธ์ ๋ ๊ฐ๋จํ ๋ฐฑํธ๋ ํน์ด์ง๋ง, ์จ๋ณด๋ฉด, ํ์ฌ ์์น์์ ๋๋จธ์ง ๊ณต์ ์ ํํ ์ ์๋ ๊ฐ์ง์์ ์ง๊ธ ๋ถํฐ ์ ํํด์ผ ํ๋ ๊ฐ์ง์๋ฅผ ๋น๊ตํ๋ค.
ํ์ฌ ์์น๋ก ๋ถํฐ ๋จ์ ๊ณต์ ๊ฐ์ < ์์ผ๋ก ์ ํํด์ผ ํ๋ ๊ณต์ ๊ฐ์
์ด์ ๊ฐ์ ๊ฒฝ์ฐ๋ ํ์์ด ๋ถ๊ฐ๋ฅ ํ๋ฏ๋ก ํจ์๋ฅผ ์ฝํ์ง ์์๋ค.
Code
// ์ค๋ฒ2 : ๋ฐฑ์ค 6603๋ฒ ๋ก๋
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int K = 6;
int arr[14];
bool checkbox[14] = {0};
int N = -1;
void go(int start, int count){
int restOfBallFromStart = N-(start+1);
if (count == 6) {
for (int i = 0; i < N; i++)
if (checkbox[i]) cout << arr[i] << " ";
cout << '\n';
return;
}
for (int i = start+1; i < N; i++) {
if (restOfBallFromStart < K-(count+1)) break;
else {
checkbox[i] = 1;
go(i, count+1);
checkbox[i] = 0;
}
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
while (N != 0) {
fill(&arr[0], &arr[13], 0);
cin >> N;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
go(-1, 0);
cout << '\n';
}
return 0;
}