テストコード|(JavaScript)プログラマー:コーラ推測
に質問
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を返します.
制限
入力された数字は
🎹📢I/O例
ほどく
function solution(num) {
let answer = 0;
while(num > 1){
// 입력된 수가 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한다
if(num % 2 === 0){
num /= 2;
} else{
num = num * 3 + 1;
}
// 반복 횟수가 500회가 넘는다면 루틴을 종료시키고 결과값을 -1로 대입한다.
if(++answer > 500){
answer = -1;
break;
}
}
return answer;
}
問題の説明は分かりやすいので、意図は速くてはっきりしている.これは好きなように書きやすい問題です.ずっとコーディングテストをしているので、1級くらいは簡単だと思います.🎈他人の解答
const solution = (num) => collatzGuessCount(num, 0);
const collatzGuessCount = (num, acc) =>
(num === 1) ? ((acc > 500) ? -1 : acc) : collatzGuessCount(processCollatz(num), acc + 1);
const processCollatz = (num) => (num % 2 === 0) ? (num / 2) : (num * 3 + 1);
他の人が再帰的な方法で解いたのは明らかだ.もっと複雑に見えますが...クリエイティブに拍手!残念な点があれば、可読性と性能です.身につけるにも少し時間がかかります.ううう参考資料とサイト(ありがとうございます)
Reference
この問題について(テストコード|(JavaScript)プログラマー:コーラ推測), 我々は、より多くの情報をここで見つけました https://velog.io/@goblin820/코딩테스트-JavaScript-프로그래머스-콜라츠-추측テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol