프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • vanilaJS
  • 비트마스크
  • 자바스크립트비트마스크
  • Til
  • 코딩프로젝트
  • 모던자바스크립트딥다이브
  • 내일배움카드
  • JavaScript
  • 내일배움단
  • 2023 인프콘 후기
  • nomadcoders
  • 알고리즘
  • 스파르타코딩클럽
  • nomadcoder
  • 투포인터알고리즘
  • 자바스크립트알고리즘
  • 자바스크립트
  • 국비지원
  • MySQL
  • 코드스테이츠

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이

[알고리즘]뒤집은 소수(소수 판별하기)

2022. 2. 2. 23:42

문제

n개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하세요.

풀이

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

      function solution(arr) {
        let answer = [];
        for (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;
      }

      let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
      console.log(solution(arr));

소수 판별

  • 소수란 1과 자신만을 약수로 갖는 수로, 1은 소수가 될 수 없다.
  • 소수의 조건중에 1과 자기 자신 이외에 나누어 떨어지는 수가 있으면 소수가 아니므로 false를 반환한다.
function isPrime(num) {
        if (num === 1) return false;
        for (let i = 2; i < Math.sqrt(num); i++) {
          if (num % i === 0) return false;
        }
        return true;
      }​
  • 만약 16이라는 수가 있을 때, 그 수의 약수 조합은 1*16, 2*8, 4*4, 8*2, 16*1 이 있을 것이다.
  • 1과 자기자신을 제외한 2~15의 범위 내에서, 약수는 16의 절반인 8 까지의 범위에 존재한다.
  • 또한 16의 제곱근 4를 기준으로 그 이후는 앞서 반복된 것을 뒤집어 반복하는 것이므로, 숫자를 하나씩 돌며 나누어 떨어지는지 판별할 때 이 범위를 Math.sqrt(num)즉 num의 제곱근까지만 반복해주는 것이 효율적이다.

숫자 뒤집기

 function solution(arr) {
        let answer = [];
        for (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;
      }
  • while(x) x가 0이 될 때 까지 아래의 코드를 반복한다.
  • let t = x%10 x의 일의 자리를 t에 할당한다.
  • res = res * 10 +t res에 10을 곱해 원래 값을 왼쪽으로 밀고 t를 더한다
  • x = parseInt(x/10) x를 일의 자리를 제외한 몫으로 재할당한다.
function solution(arr) {
        let answer = [];
        for (x of arr) {
          let res = Number(x.toString().split('').reverse().join('');

          if (isPrime(res)) answer.push(res);
        }

        return answer;
      }
저작자표시 (새창열림)

'Algorithm & 자료구조 > (인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글

[알고리즘]졸업선물 - sort 정렬, 완전탐색  (0) 2022.02.06
[알고리즘]멘토링 - 완전탐색  (0) 2022.02.03
[알고리즘]자릿수의 합  (0) 2022.02.01
[알고리즘]문자열 압축  (0) 2022.02.01
[알고리즘]가장 짧은 문자 거리  (0) 2022.02.01
    'Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
    • [알고리즘]졸업선물 - sort 정렬, 완전탐색
    • [알고리즘]멘토링 - 완전탐색
    • [알고리즘]자릿수의 합
    • [알고리즘]문자열 압축
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바