プログラムデザイナーlv 1回答:推測
4058 ワード
プログラムデザイナーlv 1回答:推測
1937年にCollatzが提案したこの推測は,与えられた数が1になる前に次のタスクを繰り返し実行すれば,すべての数を1にすることができるということである.操作は次のとおりです.
入力の数字は、
nresult68164626331-1
I/O例#1問題の説明.
I/O例#216->8->4->2->1の計4回は1です.
I/O例#3626331は、500回の試行で1にならないため、−1を返さなければならない.
問題の説明
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または800万未満の整数である.I/O例
nresult68164626331-1
I/O例説明
I/O例#1問題の説明.
I/O例#216->8->4->2->1の計4回は1です.
I/O例#3626331は、500回の試行で1にならないため、−1を返さなければならない.
説明する
function solution(num) {
// 결과 반복 횟수 저장 변수
let result = 0;
// 최대 500회만 반복해 주기 위한 변수
let count = 0;
// 최대 500번 실행
while (count < 500) {
// num이 1이라면 break
if (num === 1) {
break;
}
// num이 짝수라면 / 2
// 홀수라면 * 3 + 1
// 반복횟수 + 1
if (num % 2 === 0) {
num = num / 2;
} else {
num = num * 3 + 1;
}
result++;
count++;
}
// 500회를 반복했음에도 1이 아니라면 -1 반환
if (num !== 1) {
return -1;
}
// 결과 반환
return result;
}
Reference
この問題について(プログラムデザイナーlv 1回答:推測), 我々は、より多くの情報をここで見つけました https://velog.io/@younghoss/프로그래머스-lv1-문제-풀이-콜라스-추측テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol