コラズの推測
質問する
問題の説明
1937年にCollatzが提案したこの推測は,与えられた数が1になる前に次のタスクを繰り返し実行すれば,すべての数を1にすることができるということである.操作は次のとおりです.
1-1. 入力した数字が偶数の場合は2に分けられます.
1-2. 入力した数字が奇数の場合、3を掛けて1を加算します.
2.結果が1になるまで、同じ操作を繰り返します.
例えば、入力された数字が6であれば、6→3→10→5→16→8→4→2→1の計8回が1となる.上記の操作を何回繰り返すかを示す関数を返します.解決策を完了します.ただし、タスクを500回繰り返しても1未満の場合は、-1を返します.
せいげんじょうけん
入力された数値numは1または800000未満の整数です.
I/O例
n result
6 8
16 4
626331 -1
I/O例説明
I/O例#1
問題の説明.
I/O例#2
16->8->4->2->1で、4回で1となります.
I/O例#3
626331は500回の試行で1にならないため、-1を返さなければならない.
コード#コード#
class Solution {
// 1. 입력 데이터 타입을 long 형으로 변경.
public int solution(long num) {
int answer = 0;
// 2. 입력 데이터 num이 1이 아니며, 연산횟수가 500번 이하라면.
while(num != 1 && answer <= 500){
// 3. 삼항 연산자를 통해 num을 갱신 후, 연산횟수 증가.
num = num % 2 == 0 ? num/=2 : (num * 3) + 1;
answer++;
}
// 4. 연산횟수가 501번인 경우는 1을 만들지 못했으므로 -1을, 나머지는 연산횟수를 반환한다.
return answer != 501 ? answer : -1;
}
}
Reference
この問題について(コラズの推測), 我々は、より多くの情報をここで見つけました https://velog.io/@jjems/콜라츠-추측-0k6n6c13テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol