코딩테스트/Lv1

[Python, Javascript] 백준 온라인 저지 2581번

ggulgood 2022. 4. 25. 03:13

실버 Lv4 https://www.acmicpc.net/problem/2581

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

 

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

 

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로,

이들 소수의 합은 620이고, 최솟값은 61이 된다.

 

 

 

 

[Python]

 

풀이 방법:

 

숫자의 범위가 주어지면 소수를 구하고서 소수들의 합과 최솟값을 출력하는 문제

먼저 숫자 범위를 먼저 생성하고서 반복문을 이용해서 숫자를 꺼낼 때마다 1과 자기 자신을 제외한 수를 나눠서 나누어 떨어지는 수가 없으면 소수 리스트에 더해가보자

 

정답:

m = int(input())
n = int(input())

lists = [] # 소수 담을 리스트

for i in range(m, n + 1):
    error = 0
    if i > 1 :
        for j in range(2, i): # 2 ~ i-1
            if i % j == 0:
                error += 1
                break
        if error == 0:
            lists.append(i) # 소수 담기

if len(lists) > 0:
    print(sum(lists))
    print(min(lists))
else:
    print(-1)

 

 

[Javascript]

 

풀이 방법:

 

파이썬 방식으로 JS로 코드를 짜보았지만 런타임에러가 발생한다.

JS 코테는 처음 작성해보아 우선 참고 코드를 적고 재확인해야겠다.

 

 

정답:

출처 https://nyang-in.tistory.com/186

let fs = require('fs');
let input = fs.readFileSync('예제.txt').toString().split('\n');

//a이상 b이하라고 한다면
let a = Number(input[0]);
let b = Number(input[1]);
let primeNumbers = [];
let sum = 0;

for(let target = a; target <= b; target++){
    for(let p = 2; p <= target; p++){
        if(p*p > target){
            primeNumbers.push(target);
            sum += target;
            break;
        }
        if(target % p === 0){
            break;
        }
    }
}
if(primeNumbers.length === 0){
    console.log(-1);
}else{
    console.log(sum);
    console.log(primeNumbers[0]);
}

 

나의 에러코드:

let a = Number(input[0]);
let b = Number(input[1]);
let primeNumbers = [];
let sum = 0;
let err = 0;

for(let target = a; target <= b; target++){
    if (target > 1) {
        for(let p = 2; p <= target; p++){
            if( target % p === 0){
                err += 1;
                break;
            }
        }
        if (err === 0){
            primeNumbers.push(target);
            sum += target;
            break;
            }  
     }
}

if(primeNumbers.length === 0){
    console.log(-1);
}else{
    console.log(sum);
    console.log(primeNumbers[0]);
}