자바/코드트리

[코드트리] 범위 내의 소수 1 - 자바(Java)

Jakorithm 2024. 8. 7. 02:09
728x90

문제

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

 

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

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

www.codetree.ai

 

 

숫자 두 개가 주어집니다. 이 두 수 사이의(경계 포함) 소수의 합과, 가장 작은 소수를 출력하는 프로그램을 작성해 보세요. 만약 사이에 소수가 한 개도 없다면 둘 다 0을 출력하세요.

 

입력 예시 1

1 3

 

출력 예시 1

5 2

 

입력 예시 2

123 456

 

출력 예시 2

16139 127

 

 

코드

첫 번째 줄에 숫자 두 개가 공백을 사이에 두고 주어집니다. 앞의 숫자가 뒤의 숫자보다 작거나 같게 주어집니다.

  • 1 ≤ 주어지는 숫자 ≤ 1,000,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()); // 뒤의 숫자

        long sum = 0; // 소수의 합
        int min = 0; // 가장 작은 소수

        // 가장 작은 소수 구하기
        for (int i = a; i <= b; i++) {
            if (isPrime(i)) {
                min = i;
                break;
            }
        }

        // 소수들의 합 구하기
        for (int i = a; i <= b; i++) {
            if (isPrime(i)) {
                sum += i;
            }
        }

        bw.write(sum + " " + min);
        bw.flush();
        bw.close();
    }

    // 소수 판별하기
    private static boolean isPrime(int num) {
        if (num < 2) { // 2보다 작으면 소수 아님
            return false;
        }

        // 2의 제곱근만큼 반복
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) { // num이 i로 나누어 떨어지면
                return false; // 소수 아님
            }
        }

        return true;
    }
}

 

728x90