숫자 1에서 시작하여 반복적으로 5를 더하거나 3을 곱하면 무한한 양의 새로운 숫자가 생성될 수 있습니다. 숫자가 주어지면 해당 숫자를 생성하는 덧셈과 곱셈의 시퀀스를 찾으려고 시도하는 함수를 작성해야 합니다. 그런 시퀀스가 있는지 여부에 따라 부울 값을 반환합니다.
예를 들어,
숫자 13은 먼저 3을 곱한 다음 5를 두 번 더하여 도달할 수 있으므로 함수는 13에 대해 true를 반환해야 합니다. 반면 숫자 15에는 전혀 도달할 수 없으므로 함수는 15에 대해 false를 반환해야 합니다.
접근
원하는 솔루션으로 이어지는 모든 가능성을 반복적으로 시도하는 재귀적 접근 방식을 사용할 것입니다. 이 접근 방식의 코드는 -
예시
const sequenceExists = (num, curr = 1) => { if(curr > num){ return false; }; if(curr === num){ return true; }; return sequenceExists(num, curr+5) || sequenceExists(num, curr*3); }; console.log(sequenceExists(18)); console.log(sequenceExists(15)); console.log(sequenceExists(32)); console.log(sequenceExists(167)); console.log(sequenceExists(17)); console.log(sequenceExists(1119));
출력
콘솔의 출력은 다음과 같습니다. -
true false true true false true