문제 풀이 :
#include <stdio.h>
int N, M;
int rec[10];
int chk[10];
void dice1(int no) {
int i;
if (no > N) {
for (i = 1; i <= N; i++) {
printf("%d ", rec[i]);
}
printf("\n");
return;
}
for (i = 1; i <= 6; i++) {
rec[no] = i;
dice1(no + 1);
}
}
void dice2(int no, int s) {
int i;
if (no > N) {
for (i = 1; i <= N; i++) {
printf("%d ", rec[i]);
}
printf("\n");
return;
}
for (i = s; i <= 6; i++) {
rec[no] = i;
dice2(no + 1, i);
}
}
//중복을 제외
void dice3(int no) {
int i;
if (no > N) {
for (i = 1; i <= N; i++) {
printf("%d ", rec[i]);
}
printf("\n");
return;
}
for (i = 1; i <= 6; i++) {
if (chk[i] == 1) continue;
chk[i] = 1; //눈 사용여부 체크
rec[no] = i; //기록
dice3(no + 1); //다음 주사위로
chk[i] = 0;
}
}
void dice4(int no, int s) {
int i;
if (no > N) {
for (i = 1; i <= N; i++) {
printf("%d ", rec[i]);
}
printf("\n");
return;
}
for (i = s; i <= 6; i++) {
rec[no] = i;
dice4(no + 1, i + 1);
}
}
void dice(int no, int sum) {
int i;
if (no > N) {
if (sum == 10) {
for (i = 1; i <= N; i++) {
printf("%d ", rec[i]);
}
printf("\n");
}
return;
}
for (i = 1; i <= 6; i++) {
rec[no] = i;
dice1(no + 1);
}
}
int main() {
scanf("%d %d", &N, &M);
if (M == 1) dice1(1);
else if (M == 2) dice2(1, 1); //중복조합
else if (M == 3) dice3(1); //순열
return 0;
}
: 순열 출력과 같은 문제
'삼성전자 알고리즘 > 정올' 카테고리의 다른 글
9. 2581 : 예산 (0) | 2019.06.16 |
---|---|
8. 1889 : N Queen [DFS] (0) | 2019.06.16 |
5. 1078 : 저글링 방사능 오염 (0) | 2019.06.16 |
4. 1661 : 미로 탈출 로봇 (0) | 2019.06.16 |
3. 1240 : 제곱근 (0) | 2019.05.13 |