소수찾기

Posted by Casval's Storage on November 2, 2020

소수찾기

문제프로그래머스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function solution(numbers) {
  var answer = 0;
  const prime = [];
  
  combination('', numbers, prime);
  
  return prime.length;
}

const combination = (str, remains, prime) => {
  for(let i = 0; i < remains.length; i++) {
      const newStr = str + remains[i];
      const num = Number(newStr);
      if (isPrime(num)) {
          if (!prime.includes(num)) {
            prime.push(num);
          }
      }
      if (remains.length !== 1) {
          const newRemains = remains.concat([]);
          const ra = newRemains.split('');
          ra.splice(i, 1);
          combination(newStr, ra.join(''), prime);
      }
  }
}

const isPrime = (num) => {
  if (num === 0 || num === 1) {
    return false;
  }

  // 소수 체크: 해당 숫자를 i의 2부터 제곱근까지 나누어 본다
  // -> i를 제곱한 수로 나눈다와 같은 의미
  for (let i = 2; i*i <= num; i++) {
      if(num % i === 0) {
          return false;
      }
  }
  return true;
}

console.log(solution('17'));

회고

전체 조합(combination). 소수를 판단 하는 법을 필요로 하는 문제 전체 조합에 대해 모두 소수 체크를 하는 완전 탐색. 소수 체크: (https://myjamong.tistory.com/139)