[백준 문제 풀이] 4134번 다음 소수

Junu Kim·2026년 1월 3일
post-thumbnail

[4134] 다음 소수

난이도: ★★☆☆☆ • solved on: 2026-01-03


문제 요약

  • 문제 유형: 수학, 소수 판정, 브루트포스
  • 요구사항: 각 테스트케이스마다 입력된 수 n 이상에서 가장 작은 소수를 찾아 출력해야 한다.

사용 개념

  1. 자료구조

    • StringBuilder : 여러 줄 출력 누적
    • BufferedReader : 빠른 입력
  2. 알고리즘/기법

    • 소수 판정(Prime Check)
    • n부터 1씩 증가시키며 첫 소수 탐색
  3. 핵심 키워드

    • 소수(prime number)
    • √n 까지 나눗셈 검사

풀이 아이디어

  1. 문제 분해
  • 각 입력 target에 대해 current = target으로 시작한다.
  • current가 소수인지 확인하고, 아니면 current++ 하며 반복한다.
  • 처음으로 소수 판정을 통과한 current를 출력한다.
  1. 핵심 로직 흐름

    for i in 1..T:
        current = target
        while true:
            if isPrime(current):
                print current
                break
            current++
  2. 예외 처리

    • 0, 1은 소수가 아니므로 false로 처리한다.
    • 2는 소수이므로 true로 처리한다.

코드

import java.util.*;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        long target;
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < n; i++){
            String s = br.readLine();
            target = Long.parseLong(s);
            long current = target;
            while(true){
                if(isPrime(current)){
                    sb.append(current).append("\n");
                    break;
                }
                current++;
            }
        }
        System.out.print(sb);
    }
    public static boolean isPrime(long n){
        if(n == 1 || n == 0) return false;
        if(n == 2) return true;
        for(long i = 2; i*i <= n; i++){
            if(n % i == 0){
                return false;
            }
        }
        return true;
    }
}

시간·공간 복잡도

  • 시간 복잡도: 최악의 경우 O(K × √M)

    • K = 소수를 찾을 때까지 증가한 횟수
    • M = 검사 중인 수 크기
  • 공간 복잡도: O(1) (입력/출력 버퍼 제외)


어려웠던 점

  • 0, 1이 소수가 아니라는 예외를 놓치면 오답이 나기 쉽다.
  • target부터 시작해서 다음 소수를 찾는 반복 구조에서, 소수 판정 함수가 정확해야 한다.

배운 점 및 팁

  • 소수 판정은 2부터 √n까지만 나눠보면 된다.
  • 밀러-라빈 테스트를 구현하면 더 효율적인 검증이 가능하지만 아직 어려워 이해하지 못했다.

참고 및 링크


추가 연습 문제

profile
생각이 현실이 될 수 있도록 노력하는 중입니다.

0개의 댓글