ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2153. [JavaScript]소수 단어
    JavaScript_알고리즘/Bronze II 2024. 6. 17. 17:28

    1. 문제

     

    https://www.acmicpc.net/problem/2153

     

     

    2. 접근 방법

     

    • 시간 제한: 2초
    • 메모리 제한: 128MB
    • 소수 판별

     

    3. 자바스크립트 코드

     

    // 에라토스테네스의 체
    function primeCheck(checkNumber) {
      // 이 문제에서는 1도 소수라 판단해서 0만 소수 예외 처리한 후 나머지 false 로 초기화
      let primeList = Array(1).fill(true).concat(Array(10000).fill(false));
      // 최대 52 * 20 개 까지 공간이 필요하지만 넉넉하게 10000 선언
      for (let i = 2; i <= Math.sqrt(10000); i++) {
        // false 인 경우 i 수는 소수이기 때문에 그 제곱수부터 i 를 더해나간 수를 true 처리
        if (primeList[i] === false) {
          for (let j = i * i; j <= 10000; j += i) {
            primeList[j] = true;
          }
        }
      }
      // 들어온 값의 true, false 판단으로 소수인지 체크
      return primeList[checkNumber];
    }
    // 인풋 받아오는 부분
    const fs = require("fs");
    // vscode 에서는 txt 로 처리 => 백준은 /dev/stdin 으로 변형 // trim 으로 공백제거
    const input = fs.readFileSync("./2153.txt").toString().trim().split("");
    // 총합 변수
    let total = 0;
    // input 에서 word 한개씩 반복문 진행
    for (word of input) {
      // 대문자인지 판단
      if (word === word.toUpperCase()) {
        // 대문자의 경우 -38 을 하여서 27 부터 시작
        total += word.charCodeAt() - 38;
      } else {
        // 소문자의 경우 -96 을 하여서 1 부터 시작
        total += word.charCodeAt() - 96;
      }
    }
    // 소수판단하여 소수의 경우 아닌 경우 출력 형식 변경
    if (primeCheck(total)) {
      console.log("It is not a prime word.");
    } else {
      console.log("It is a prime word.");
    }

     

    4. 문제를 풀고난 후 생각

     

    • 에라토스테네스의 체를 이용하여 소수를 미리 판별한 후 아스키 코드 변환을 통해서 들어온 문자의 합을 구한다.
    • 구한 값을 함수에 대입하여 소수인지 아닌지 true, false로 판단하여 출력한다.
    • JS에서는 trim() 값이 없으면 \r, \n 이런 문자가 들어오기 때문에 input을 처리할때 trim() 처리를 해줘야 한다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 소수 판별 ( 에라토스테네스의 체 )

    'JavaScript_알고리즘 > Bronze II' 카테고리의 다른 글

    1977. [JavaScript]완전제곱수  (0) 2024.06.17

    댓글

Designed by Tistory.