문제 : 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다
1-1 . 입력된 수가 짝수라면 2로 나눕니다.
1-2 . 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다
이때 1이 되기까지 작업이 몇번 이뤄졌는지 리턴! 단 500 번 반복해도 1이 안되면 -1 반환!
제한 사항 :
- 입력된 수, num은 1 이상 8000000 미만인 정수입니다.
풀이 : Step 진행 되는것처럼~ Enum 변수 사용법이 다르다!
package com.company;
import java.util.Arrays;
public class CollatzGuess {
public enum collatz
{
Even,
Odd,
End
}
public static void main(String[] args) {
System.out.println(solution(6));
System.out.println(solution(16));
System.out.println(solution(626331));
}
public static int solution(int num) {
long answer = num;
int count = 0;
CollatzGuess.collatz cl;
if (num == 1) return 0;
cl = answer % 2 == 0 ? collatz.Even : collatz.Odd;
while(count <= 500)
{
switch (cl)
{
case Even:
{
answer = answer / 2;
count++;
cl = collatz.End;
break;
}
case Odd:
{
answer = 3 * answer + 1;
count++;
cl = collatz.End;
break;
}
case End:
{
if (answer != 1)
{
cl = answer % 2 == 0 ? collatz.Even : collatz.Odd;
}
else
{
return count;
}
}
}
}
if (count >=500) count = -1;
return count;
}
}
'알고리즘 > JAVA' 카테고리의 다른 글
[JAVA] 소수찾기 - 프로그래머스 (0) | 2020.10.21 |
---|---|
[JAVA] 3진법 뒤집기 - 프로그래머스 (0) | 2020.10.21 |
[JAVA] 제일 작은수 제거하기 - 프로그래머스 (0) | 2020.10.21 |
[JAVA] 최대공약수, 최대공배수 - 프로그래머스 (0) | 2020.10.21 |
[JAVA] K번째 수 - 프로그래머스 (0) | 2020.10.21 |