본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[Baekjoon] 1978 소수 찾기(파이썬/자바스크립트/NodeJS)

by codingBear 2023. 1. 1.
728x90
반응형

이번 문제는 아래 링크에서 풀어볼 수 있습니다.

 

1978번: 소수 찾기

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

www.acmicpc.net


문제

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

입력

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

출력

주어진 수들 중 소수의 개수를 출력한다.

예제 입력 1

4
1 3 5 7

예제 출력 1

3

정답 코드

나의 답안
파이썬 Ver.
import sys

n = int(sys.stdin.readline().rstrip())
nums = list(map(int, sys.stdin.readline().rstrip().split()))


def mySolution(n, nums):
    result = 0

    for num in nums:
        if num != 2 and num % 2 == 0:
            continue

        cnt = 0
        for i in range(1, num + 1):
            if num % i == 0:
                cnt += 1

        if cnt == 2:
            result += 1

    return result


print("mySolution", mySolution(n, nums))


자바스크립트/NodeJS Ver.

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');

const n = parseInt(input[0]);
const data = input
    .splice(1)[0]
    .split(' ')
    .map((val) => parseInt(val));

const mySolution = (n, nums) => {
    result = 0;

    for (let num of nums) {
        if (num !== 2 && num % 2 === 0) continue;

        let cnt = 0;
        for (let i = 1; i <= num; i++) {
            if (num % i === 0) cnt++;
        }

        if (cnt === 2) result++;
    }

    return result;
};

console.log('mySolution', mySolution(n, data));

 

답안 1
파이썬 Ver.
import sys

n = int(sys.stdin.readline().rstrip())
nums = list(map(int, sys.stdin.readline().rstrip().split()))


def answer1(n, nums):
    result = 0

    for num in nums:
        if num == 1:
            continue

        cnt = 0
        for i in range(2, num):
            if num % i == 0:
                cnt += 1

        if cnt == 0:
            result += 1

    return result


print("answer1", answer1(n, nums))


자바스크립트/NodeJS Ver.

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');

const n = parseInt(input[0]);
const data = input
    .splice(1)[0]
    .split(' ')
    .map((val) => parseInt(val));

const answer1 = (n, nums) => {
    let result = 0;

    for (let num of nums) {
        if (num == 1) continue;

        let cnt = 0;
        for (let i = 2; i < num; i++) {
            if (num % i === 0) cnt++;
        }

        if (cnt === 0) result++;
    }

    return result;
};

console.log('answer1', answer1(n, data));

 

답안 2
파이썬 Ver.
import sys

n = int(sys.stdin.readline().rstrip())
nums = list(map(int, sys.stdin.readline().rstrip().split()))


def answer2(n, nums):
    def is_prime(num):
        if num == 1:
            return False
        elif num == 2:
            return True

        for i in range(2, num):
            if num % i == 0:
                return False

        return True

    result = 0
    for num in nums:
        if is_prime(num):
            result += 1

    return result


print("answer2", answer2(n, nums))


자바스크립트/NodeJS Ver.

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');

const n = parseInt(input[0]);
const data = input
    .splice(1)[0]
    .split(' ')
    .map((val) => parseInt(val));

const answer2 = (n, nums) => {
    const isPrime = (num) => {
        if (num === 1) return false;
        else if (num === 2) return true;

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

        return true;
    };

    let result = 0;
    for (let num of nums) {
        if (isPrime(num)) result++;
    }

    return result;
};

console.log('answer2', answer2(n, data));

 

답안3
파이썬 Ver.
import sys

n = int(sys.stdin.readline().rstrip())
nums = list(map(int, sys.stdin.readline().rstrip().split()))


def answer3(n, nums):
    result = 0

    for num in nums:
        for i in range(2, num + 1):
            if num % i == 0:
                if num == i:
                    result += 1
                break

    return result


print("answer3", answer3(n, nums))


자바스크립트/NodeJS Ver.

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');

const n = parseInt(input[0]);
const data = input
    .splice(1)[0]
    .split(' ')
    .map((val) => parseInt(val));
    
const answer3 = (n, nums) => {
    let result = 0;

    for (let num of nums) {
        for (let i = 2; i <= num; i++) {
            if (num % i === 0) {
                if (num === i) result++;
                break;
            }
        }
    }

    return result;
};

console.log('answer3', answer3(n, data));

 


문제 풀이

 소수란 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다. 그러면서 홀수이고, 소수 중 유일한 짝수는 2이다.

 나의 경우 이러한 점에서 착안하여 입력 받은 숫자 중 탐색하는 숫자가 2가 아닌 짝수일 경우 continue를 통해 다음 수로 넘겼다. 그런 다음 for 반복문으로 1부터 num까지 순회하며 num과 i를 나눠 나머지가 0일 경우, 즉 두 수가 나눠 떨어질 경우 cnt를 1씩 증가시켰다. 최종적으로 cnt가 2라면 1부터 num까지 수 중 num과 나눠 떨어지는 수가 1과 num 자기 자신밖에 없다는 뜻이므로 결괏값을 1씩 증가시키는 방식으로 코드를 짰다.

 나머지 코드들도 소수의 정의에 부합하게끔 코드를 작성한 것들이므로 잘 살펴보길 바란다.


https://pacific-ocean.tistory.com/46

 

백준 알고리즘 1978번(python 파이썬)

문제 링크: https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net n = int(input()

pacific-ocean.tistory.com

https://seongonion.tistory.com/39

 

[백준] 1978번 소수 찾기 - 파이썬(Python)

문제 (링크) https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 나의 풀이

seongonion.tistory.com

 

728x90
반응형

댓글