프로그래밍/알고리즘 풀이
[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 하겠단 뜻이다.
사실 되게 직관적이긴 한데, 막상 다루려고 하면 헷갈릴 수 있다.
따라서 함수를 분할하는 게 싸게 먹힌다.
반응형