Jakorithm
article thumbnail
728x90

문제

https://www.codetree.ai/problems/prime-number?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

a이상 b이하 범위 안의 수 중 소수인 것을 모두 찾아 총 합과 최솟값을 출력하는 프로그램을 작성해보세요.

 

입력 예시

1 10

 

출력 예시

17
2

 

 

코드

첫 번째 줄에 a, b가 공백으로 구분되어 주어진다.

  • 1 ≤ a ≤ b ≤ 10,000
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());

        int sum = 0; // 소수들의 합
        int min = 0; // 소수의 최솟값
        boolean flag = false; // 최솟값 flag
        // a부터 b까지 순회
        for (int i = a; i <= b; i++) {
            if (isPrime(i)) { // 소수인 경우
                if (!flag) {
                    min = i; // 최솟값
                    flag = true;
                }
                sum += i; // sum + i
            }
        }

        if (min == 0) {
            bw.write(String.valueOf(-1));
        } else {
            bw.write(sum + "\n" + min);
        }
        bw.flush();
        bw.close();
    }

    // 소수 판별하기
    private static boolean isPrime(int num) {
        if (num == 1) { // num이 1이면 false
            return false;
        }

        // 2부터 num의 제곱근까지 반복
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) { // num이 i로 나누어 떨어지는 경우 소수X
                return false;
            }
        }
        return true;
    }
}

 

728x90