티스토리 뷰

알고리즘(C++)/Programmers 알고리즘

콜라츠 추측

개발하는꼬물이 2017. 10. 2. 19:11

문제. 1937년 Collatz란 사람에 의해 제기된 이 추측은, 입력된 수가 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한 다음, 결과로 나온 수에 같은 작업을 1이 될 때까지 반복할 경우 모든 수가 1이 된다는 추측입니다. 예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. collatz 함수를 만들어 입력된 수가 몇 번 만에 1이 되는지 반환해 주세요. 단, 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.


#include <iostream>
using namespace std;

int collatz(long long num)
{
	int count = 0;

	while (1)
	{
		if (num % 2 == 0)
		{
			num = num / 2;
			count++;
		}
		else
		{
			num = (num * 3) + 1;
			count++;
		}

		if (count >= 500)
		{
			return -1;
		}

		if (num == 1)
		{
			return count;
		}
	}
}

int main()
{
	long long testCase = 7123456789;
	int testAnswer = collatz(testCase);

	cout << testAnswer;
}


->  다른 사람들이 푼 풀이 보고 내 코드가 너무 허접스러워서 부끄러웠다.

     삼항연산자 이용해서 5줄 이내로 간단하게 짤 수도 있더라..

     나중에 다시 한번 풀기!! 

'알고리즘(C++) > Programmers 알고리즘' 카테고리의 다른 글

최솟값 만들기  (0) 2017.10.02
소수 찾기  (0) 2017.10.02
행렬의 덧셈  (0) 2017.09.28
피보나치 수  (0) 2017.09.28
약수의 합  (0) 2017.09.28
댓글