본문 바로가기

프로그래밍 문제/정올

233 : 함수3 - 형성평가3

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개가 넘는 정올을 올리려고 한다.

포트폴리오에도 좋고 아무튼 좋을 것 같다.

문제는 재귀함수인데 여전히 어렵다;