반응형
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력 1 복사
4 1 3 5 7
예제 출력 1 복사
3
1000 이하의 소수들만 주기 때문에
1000 이하 소수를 모두 구하고
비교해보면 된다.
// 입력
const fs = require('fs');
const filePath = process.platform === 'linux'? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');
// 숫자 갯수
let caseNum = parseInt(input.shift());
// 입력 숫자들
let numbers = input[0].split(' ').map(item=>+item);
// 1000이하 소수 모두 array에 넣기
let primeNum = [2];
let last = 1; // 소수 array 마지막 숫자
let num = 3;
let isPrime = true;
// 소수 array 만드는 반복문
while (last<1000) { // 소수 마지막 수가 1000 이하일 때만 반복
for (let i = 2; i < num; i++) {
// num 보다 작은 수로 나눠서 나누어 떨어지면 소수가 아님
if(num%i == 0) {
isPrime = false; // 소수가 아님
break;
}
}
// 반복문이 break 해서 소수라면
if(isPrime == true) {
last = num;
primeNum.push(num); // +를 쓰지말고 push를 쓰자!
// +를 쓰면 string화가 되는지 1이 인식됨
}
// 다시 isPrime 값을 true로 바꿔줘서 반복문을 돌 수 있게 함
isPrime = true;
num++;
}
// 소수 array에 숫자가 있는지 확인
let answer = 0;
for (let i = 0; i < numbers.length; i++) {
// 배열에 들어있는지 확인
let isIn = primeNum.includes(numbers[i]);
// true라면 갯수 증가
if (isIn) answer++;
}
console.log(answer);
내 코드가 너무 긴 거 같아서 좀 줄이려고 생각하면서 풀어봐야겠다.
알고리즘 건들지도 않았을 때 이거보고 정말 어렵다는 생각을 했는데,
그런 쪽 생각을 안해봐서 그랬던 것 같다.
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
JS) BoJ 1157 단어 공부 (0) | 2021.07.31 |
---|---|
JS) BoJ 1929 소수 구하기/ 에라토스테네스의 체 (0) | 2021.07.31 |
JS) BoJ 1546 평균 (0) | 2021.07.30 |
JS) BoJ 2920 음계 (0) | 2021.07.30 |
JS) BoJ 10809 알파벳 찾기 (0) | 2021.07.30 |