본문 바로가기

알고리즘/백준

[백준] 2581 - 소수 (JAVA/ 자바)

반응형

2581번 문제

 

1. Scanner를 이용한 방법

import java.util.Scanner;

public class Main{
public static void main(String[] args){

    Scanner sc = new Scanner(System.in);
    int M = sc.nextInt();
    int N = sc.nextInt();
    int[] num = new int[N+1];
    int[] sosu = new int[N+1];
    int sum = 0;
    int min = N;

    for(int i=M; i<=N; i++){
        num[i] += i;
        for(int j=2; j<=N; j++){
            if(j == num[i]){
                sosu[j] += j;
                min = Math.min(sosu[j], min);
                sum += sosu[j];
            }
            if(num[i] % j == 0){
                break;
            }
        }
    }
    if(sum == 0){
        System.out.println(-1);
    }else{
        System.out.println(sum);
        System.out.println(min);
    }
    sc.close();
    }
}

 

2. BufferedReader를 이용한 방법

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
public static void main(String[] args)throws IOException{

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int M = Integer.parseInt(br.readLine());
    int N = Integer.parseInt(br.readLine());

    int[] num = new int[N+1];
    int[] sosu = new int[N+1];
    int sum = 0;
    int min = N;

    for(int i=M; i<=N; i++){
        num[i] += i;
        for(int j=2; j<=N; j++){
            if(j == num[i]){
                sosu[j] += j;
                min = Math.min(sosu[j], min);
                sum += sosu[j];
            }
            if(num[i] % j == 0){
                break;
            }
        }
    }
    if(sum == 0){
        System.out.println(-1);
    }else{
        System.out.println(sum);
        System.out.println(min);
    }
    br.close();
    }
}

반례도 다 맞는데 계속 틀리길래 이것저것 바꿔보면서 이유를 찾아보니 min 값을 임의의 숫자로 정할 게 아니라 최댓값인 N으로 설정해줘야 되는 것이었다.

반응형