문제 : 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다
1-1 . 입력된 수가 짝수라면 2로 나눕니다.
1-2 . 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다
이때 1이 되기까지 작업이 몇번 이뤄졌는지 리턴! 단 500 번 반복해도 1이 안되면 -1 반환!
제한 사항 :
- 입력된 수, num은 1 이상 8000000 미만인 정수입니다.
풀이 : Step 형식으로 Switch 문을 무한 루프 시켜 안에서 정해진 답이 나오기전까지 Step 을 탈수 있도록 수정!
Enum 타입을 지정하고 Swtich 를 만들면 자동 생성됨 ㅎ
public enum collatz
{
Even,
Odd,
End,
}
public static int solution(int num)
{
long answer = num;
int cnt = 0;
collatz collatz = new collatz();
if (num == 1) return 0;
collatz = answer % 2 == 0 ? collatz.Even : collatz.Odd;
while (true)
{
switch (collatz)
{
case Solution.collatz.Even:
{
answer = answer / 2;
cnt++;
collatz = collatz.End;
break;
}
case Solution.collatz.Odd:
{
answer = 3 * answer + 1;
cnt++;
collatz = collatz.End;
break;
}
case Solution.collatz.End:
{
if (answer != 1)
collatz = answer % 2 == 0 ? collatz.Even : collatz.Odd;
else if (cnt >= 500)
{
return -1;
}
else
{
return cnt;
}
break;
}
default:
break;
}
}
}
'알고리즘 > C#' 카테고리의 다른 글
[C#] 예산 - 프로그래머스 (0) | 2020.10.20 |
---|---|
[C#] 하샤드 수 - 프로그래머스 (0) | 2020.10.19 |
[C#] 최대 공약수와 최소 공배수 - 프로그래머스 (0) | 2020.10.19 |
[C#] 제일 작은 수 제거하기 - 프로그래머스 (0) | 2020.10.18 |
[C#] 정수 제곱근 판별 - 프로그래머스 (0) | 2020.10.18 |