코드 풀이

완전탐색 소수찾기

SammyK 2022. 4. 12. 17:11

풀이:

 

입력 예)  "17"

 

function solution(numbers) {
  const arr = numbers.split("");
  const answer = new Set();
  getNumber(arr, '');

 

arr 의 값

이 아래 함수로 넘겨준다.

function getNumber(numbersArr, currentNumber) {
    if (numbersArr.length) {
      // arr 수만큼 돈다.
      for (let i = 0; i < numbersArr.length; i++) {
        // temp array 변수를 지정한다.
        const temp = [...numbersArr];

        // temp에서 i번째 값을 하나 떼온다.
        temp.splice(i, 1);

        // 소수 체크
        if (isPrime(parseInt(currentNumber + numbersArr[i]))) {
          answer.add(parseInt(currentNumber + numbersArr[i]))
        }

        // 재귀로 순서가 바뀐 temp, 현재 수 + 이번에 바뀐 수를 호출한다.
        getNumber(temp, currentNumber + numbersArr[i])
      }
    }
  }

 

1 7 이 내려간다.

 

temp.slice 가 1을 빼낸다

temp 에는 7이 남는다

소수체크에 뺴낸 1을 넣어 체크한다

소수가 아니다.

temp = 7  , '1' 로 재귀한다

 

7를 빼낸다, 

temp 에는 아무것도 남지 않는다

1+7 = 17 을 소수 체크 한다

소수이니까 asnwer 에 넣는다

temp 에 아무숫자가 없다, 멈춘다.


다시 1 7 이 내려간다

이번엔 2번쨰 요소를 빼낸다, 7

temp 에는 1이 남는다

소수체크에 7 확인,

소수이니까 asnwer 에 넣는다

temp = 1, "7"로 재귀한다

 

1을 뺴낸다,

temp 에 아무것도 남아있지 않는다

7+1 =71 을 소수 체크한다

소수이니까 asnwer 에 넣는다

temp 에 아무숫자가 없다, 멈춘다.

 

 

누구나 이제 다 아는 소수 찾는 함수.

 function isPrime(num) {
    if (num < 2) return false;
    if (num === 2) return true;
    for (let i = 2; i <= Math.sqrt(num); i++) {
      if (num % i === 0) return false;
    }
    return true;
  }

  return answer.size;
}

지금까지 넣은 unique 한 값의 갯수를 출력한다(.size) 

 

 

 

코드:

function solution(numbers) {
  const arr = numbers.split("");
  const answer = new Set();

  // 처음엔 배열과 빈 문자열을 파라미터로 넣는다.
  getNumber(arr, '');

  function getNumber(numbersArr, currentNumber) {
    if (numbersArr.length) {
      // arr 수만큼 돈다.
      for (let i = 0; i < numbersArr.length; i++) {
        // temp array 변수를 지정한다.
        const temp = [...numbersArr];

        // temp에서 i번째 값을 하나 떼온다.
        temp.splice(i, 1);

        // 소수 체크
        if (isPrime(parseInt(currentNumber + numbersArr[i]))) {
          answer.add(parseInt(currentNumber + numbersArr[i]))
        }

        // 재귀로 순서가 바뀐 temp, 현재 수 + 이번에 바뀐 수를 호출한다.
        getNumber(temp, currentNumber + numbersArr[i])
      }
    }
  }

  function isPrime(num) {
    if (num < 2) return false;
    if (num === 2) return true;
    for (let i = 2; i <= Math.sqrt(num); i++) {
      if (num % i === 0) return false;
    }
    return true;
  }

  return answer.size;
}

 

'코드 풀이' 카테고리의 다른 글

백준 4948번 베르트랑 공준 소수 구하기  (0) 2022.04.26
피보나치 수  (1) 2022.04.18
메뉴 리뉴얼  (0) 2022.04.04
기능 개발  (0) 2022.03.30
124 나라의 숫자  (0) 2022.03.29