본문 바로가기

코딩 테스트

[백준 : JAVA] 1929 소수 구하기

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

public class silver3_1929 {
    static boolean[] primeNum;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        primeNum = new boolean[b+1];
        prime(b);
        for (int i = 0; i < a; i++) {
            primeNum[i] = true;
        }
        primeNum[0]=primeNum[1]=true;
        for (int i = 0; i < primeNum.length; i++) {
            if (!primeNum[i]) {
                System.out.println(i);
            }
        }
    }
    static void prime( int b) {
        for (int i = 2; i <=b ; i++) {
            for (int j = i * i; j <= b; j += i) {
                primeNum[j] = true;
            }
        }
    }
}

이 문제는 소수 구하는 문제로 에라스토테네스의 체를 이용하여 풀면 간단한 문제다. 다만 위에 prime 함수에서 이중 포문을 사용했는데 안쪽 포문에서 j= i * i 부분때문에 계속 런타임 에러가 떴었다. 이 문제는 프로그래머스에서 똑같은 에러때문에 고생했던 문제라 다행히 이번엔 빨리 발견하고 i+i로 고칠수 있었다.