[알고리즘] 암호생성기

do_large·2020년 8월 10일
0

알고리즘

목록 보기
2/50
post-thumbnail

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14uWl6AF0CFAYD&

생각해봐야 할 부분

  • 재귀함수를 사용해서 문제풀기
#include <stdio.h>

void moveNum(int* arr, int index);
void moveArr(int* arr);

int count;
int numArr[8];

int main(void) {

    for (int i = 0; i < 10; i++) {
        scanf("%d", &count);
        for (int j = 0; j < 8; j++) {
            scanf("%d", &numArr[j]);
        }
        moveNum(numArr, 1);
    }


    return 0;
}


void moveNum(int* arr, int index) {
    if (index > 5) {
    // 1부터 5까지 계속 반복하면서 값을 빼줘야하기때문에 index가 5보다 커질때 1을 넣어준다
        index = 1;
    }

    arr[0] -= index; // arr 맨 앞에있는 값에 index를 빼주고
    moveArr(arr); // arr의 맨앞의값을 맨뒤로 보낸다

    if (arr[7] <= 0) {
    //arr 맨뒤로 이동한 값이 0보다 작아지면 그 값을 0으로 만들고 재귀함수를 종료한다
        arr[7] = 0;
        printf("#%d ", count);
        for (int i = 0; i < 8;i++) {
            printf("%d ", arr[i]);
        }
        return;
    }

    //위의 종료조건에 걸리지 않았다면 재귀함수를 호출한다
    moveNum(arr, index + 1);

}

// 재귀함수 아님. 값들의 자리를 바꿔주는 함수
void moveArr(int* arr) {
    int plate = arr[0];
    for (int i = 1; i < 8; i++) {
        arr[i - 1] = arr[i];
    }
    arr[7] = plate;
}

0개의 댓글