본문 바로가기

삼성전자 알고리즘/정올

7. 1169 : 주사위 던지기1[DFS]

문제 출처 : http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=449&sca=50&sfl=wr_subject&stx=%EC%A3%BC%EC%82%AC%EC%9C%84&sop=and

 

JUNGOL | 주사위 던지기1 > 문제은행

제한시간: 1000 ms    메모리제한: 32 MB 해결횟수: 1525 회    시도횟수: 3247 회    주사위를 던진 횟수 N과 출력형식 M을 입력 받아서 M의 값에 따라 각각 아래와 같이 출력하는 프로그램을 작성하시오. M = 1 : 주사위를 N번 던져서 나올 수 있는 모든 경우 M = 2 : 주사위를 N번 던져서 중복이 되는 경우를 제외하고 나올 수 있는 모든 경우 M = 3 : 주사위를 N번 던져서 모두 다른 수가 나올 수 있는 모든 경우 *

jungol.co.kr

문제 풀이 : 

#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