kakasoo

[node.js] 소수 찾기 ( 백준 1978번 ) 본문

프로그래밍/알고리즘 풀이

[node.js] 소수 찾기 ( 백준 1978번 )

카카수(kakasoo) 2021. 4. 7. 17:53
반응형
// 백준 1978번 소수찾기를 풀었습니다.
const readline = require("readline");

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

let count = 0;
rl.on("line", (line) => {
    if (!count) {
        count = Number(line);
    } else {
        main(line);
        rl.close();
    }
}).on("close", () => process.exit());

/**
 *
 * @param {string} line
 */
const main = (line) => {
    const numbers = line.split(" ").map(Number);
    let count = 0;
    loop1: for (let i = 0; i < numbers.length; i++) {
        const curNumber = numbers[i];
        if (curNumber < 2) {
            continue;
        }

        loop2: for (let j = 2; j * j <= curNumber; j++) {
            if (curNumber % j === 0) {
                continue loop1;
            }
        }

        count++;
    }
    console.log(count);
};
// 백준 1978번 소수찾기를 풀었습니다.
const readline = require("readline");

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

let count = 0;
rl.on("line", (line) => {
    if (!count) {
        count = Number(line);
    } else {
        main(line);
        rl.close();
    }
}).on("close", () => process.exit());

/**
 *
 * @param {number} num
 */
const isPrime = (num) => {
    if (num < 2) {
        return false;
    }

    for (let i = 2; i * i <= num; i++) {
        if (num % i === 0) {
            return false;
        }
    }
    return true;
};

/**
 *
 * @param {string} line
 */
const main = (line) => {
    const numbers = line.split(" ").map(Number);

    let count = 0;
    for (let i = 0; i < numbers.length; i++) {
        const curNumber = numbers[i];
        if (curNumber < 2) {
            continue;
        }

        if (isPrime(curNumber)) {
            count++;
        }
    }
    console.log(count);
};

두 개 방식을 제공한다. 첫번째 방식은 레이블을 이용한 방식이다. 다만 레이블을 이용하면 함수의 동작 방식을 이해하기 어려울 수 있다.
사실 직관적이라곤 생각하는데, 생소하다보니 어색하다.
break loop1이라고 한다면 loop1의 for문을 break 하겠단 뜻이고, continue loop1이라고 하면 loop1을 continue 하겠단 뜻이다.
사실 되게 직관적이긴 한데, 막상 다루려고 하면 헷갈릴 수 있다.
따라서 함수를 분할하는 게 싸게 먹힌다.

반응형