ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [04.완전탐색] 뒤집은 소수
    알고리즘 2022. 4. 3. 22:11

    문제

    N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하 는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출 력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.

    입력설명
    첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 100,000를 넘지 않는다.

    출력설명
    첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.

    입력예제 1
    9
    32 55 62 20 250 370 200 30 100

    출력예제 1 23 2 73 2 3


    결과

    O

    내가 푼 방식 

    const solution = (array) => {
        let answer= [];
        const isPrime = (num) => {
            for(let i=2; i < num; i++) {
              if(num % i === 0) return false
            }
            return num > 1
        }
    
        for(let i=0; i < array.length; i++) {
            let str = array[i].toString().split('').reverse().join('');
            if(isPrime(Number(str))) {
                answer.push(Number(str))
            }
        }
    return answer;
    }

    접근과정

    1. 소수를 구하는 함수를 생각할 수 있는 것이 관건인 문제이다.
    2. 소수는 1과 자기 자신을 제외한 모든 수로 나뉘어 지지 않는 수로 해당 값보다 작은 수들을 모두 나눠 나머지가 0인가 아닌가 여부로
      소수를 판단한다. 
    3. 매개변수로 받는 array를 반복문을 돌려 해당 인덱스의 값을 거꾸로 돌리는 작업을 위해 정수로 만들어 배열을 만들고 reverse 메소드로 돌리고 다시 string으로 합치는 작업을 해준다 (32 - >23)
    4. 3번의 과정을 거친 string을 Number로 만들어주고 아까 만든 소수 구분 함수에 넣어 여부를 판단한다.
    5. 맞다면 return할 배열에 push하여 최종 그 배열을 return한다. 

    모범답안

    function isPrime(num){
        if(num===1) return false;
        for(let i=2; i<=parseInt(Math.sqrt(num)); i++){
            if(num%i===0) return false;
        }
        return true;
    }
    function solution(arr){
        let answer=[];
        for(let x of arr){
            let res=0;
            while(x){
                let t=x%10;
                res=res*10+t;
                x=parseInt(x/10);
            }
            if(isPrime(res)) answer.push(res);
        }
        return answer;
    }

    리뷰

    댓글

Designed by Tistory.