2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#include <stdio.h>
#pragma warning (disable:4996)
#define ARR_MAX 11
int arr[ARR_MAX]; // 눈금을 담을 배열
int index = 1; // 배열의 인덱스
void dice(int level, int sum) {
int temp = 0;
for (int i = 1; i <= 6; i++)
{
arr[index] = i; // 전달받은 현재 인덱스 값을 i로 초기화
if (index == level) { // 전달받은 현재 인덱스가 level번째 항목이라면
for (int j = 1; j <= level; j++) // 1~level번째 항목을 검사
temp += arr[j]; // temp에 각 항목을 더함
if (temp == sum) { // 각 항목의 합이 sum이라면
for (int k = 1; k <= level; k++) // 각 항목 출력
printf("%d ", arr[k]);
printf("\n");
}
temp = 0; // 연산을 마친 temp함수 초기화
}
else {
index++; // 다음 인덱스 값을 위해 인덱스 증가
dice(level, sum); // 재귀 호출
arr[level + 1] = 1; // 이전 항목의 연산을 마친 후 초기화
index--; // 6번을 다 돌고 나왔다면, 이전 인덱스값 증가를 위한 인덱스 감소
}
}
}
int main() {
int level, sum;
scanf("%d %d", &level, &sum);
// level: 주사위를 던지는 회수
// sum: 던진 주사위 눈금의 합계
dice(level, sum);
return 0;
}
|
cs |
|
이 글을 기점으로 이제껏 푼 문제만 150개가 넘는 정올을 올리려고 한다.
포트폴리오에도 좋고 아무튼 좋을 것 같다.
문제는 재귀함수인데 여전히 어렵다;