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;
}