실버 Lv 4 https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

 

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

 

 

 

[Python]

 

풀이 방법:

 

바로 전 게시글 2581번도 소수 관련 문제이다.

2581번과의 차이점은 해당 문제는 숫자의 범위가 주어지며 소수들의 합과 최소값을 출력하는 문제이다.

리스트로 소수를 담아 합과 최소값을 구하기 편리하다.

 

반면, 1978번 문제는 단지 소수가 몇 개인지 찾아야하는 문제이므로 소수를 카운팅하여 출력해주기만 하면 된다.

 

 

정답:

n = int(input())
numbers = map(int, input().split())
real_numbers = 0 # 소수

for num in numbers:
    err = 0
    if num > 1:
        for i in range(2, num):
            if num % i == 0: # 소수가 아니면
                err += 1
        if err == 0:
            real_numbers += 1 # 소수 담기, 소수개수 세는거니까
            
print(real_numbers)

 

 

 

[Javascript]

 

다양한 풀이들을 참고해 보았다.

 

코드 1

const input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n');

console.log(input[1].split(' ').filter(x => 
    {
        if(x == 1){
            return false;
        }
        for( let i = 2; i < x; i++){
                if(x % i === 0){
                	return false;  
                }         
        }
        return true;
    }).length)

 

코드 2

const [n, arr] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')

newArr = arr.split(' ').map(el => parseInt(el))
const primes = []


newArr.map((num, idx) => {
  let isPrime = true
  
  for(let i = 2; i <= num/2; i++) {
    if(num % i === 0) {
      isPrime = false
      break
    }
  }
  if(isPrime && num !== 1) {
    primes.push(num)
  }
})

console.log(primes.length)

 

 

+ Recent posts