⚙️ 알고리즘/기타 문제 & 풀이

[C] 사이클 길이(순환)

dev_zoe 2020. 7. 23. 02:14
반응형

사이클 길이?

어떤 정수 n이 짝수면 2로 나누고 홀수면 3을 곱한 다음 1을 더한다. 이런 과정을 반복하면서 n=1이 되면 멈춘다. 이 때 1이 나올 때까지 만들어진 수의 개수를 (n과 1 포함) 사이클 길이라고 한다.

 

입력 : 22

출력 : 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

        사이클 길이는 16

 

위와 은 수열을 출력하고 사이클 길이를 리턴해주는 함수를 순환을 이용하여 작성하시오.

 

int get_cycle_number(int n) {
	int cycle_length = 1;

	printf("%d ", n); //수열을 만들면서 숫자 출력

	if (n == 1)
		return count;
	else if (n % 2 == 0) //n이 짝수이면
		cycle_length+=get_cycle_number(n / 2); //n을 2로 나누고 자기 자신을 호출한다.
        							//이 때 사이클 길이가 1 추가되므로 count에 더하면서 호출함
	else    //n이 홀수이면
		cycle_length+=get_cycle_number(n * 3 + 1); //n에 3을 곱하고 1을 더한다.

	return cycle_length; //모든 호출과정이 끝나고 구해진 사이클 길이(count)를 return한다.
}

int main(void) {
	int num;
	scanf("%d", &num);

	printf("\n사이클 길이는 %d\n", get_cycle_number(num));
}

반응형