[백준] 24039 2021은 무엇이 특별할까? JAVA

혅·2024년 3월 13일

1일1백준 -Java-

목록 보기
58/60

문제

백준 온라인 저지의 송년대회 Good Bye BOJ, 2021!의 개최일은 2021년 12월 31일이다. 원이는 대회가 개최된다는 사실이 기뻐 제목을 뚫어져라 보다가 2021이 무언가 특별하다는 사실을 깨달았다.

그렇다. 2021은 연속한 두 소수 43과 47의 곱이다. 다음에 이런년도가 오려면 무려 470년 뒤인 2491년이 되어야 한다. 원이는 어떤 수가 연속한 두 소수의 곱으로 이루어져 있으면 특별한 수라 부르기로 하였다.

주어진 수보다 큰 특별한 수 중 가장 작은 수를 구하는 프로그램을 작성하시오.

제한 : 1<= N <= 10,000, N은 정수이다.

입력

첫 번째 줄에 주어진 수 N이 주어진다.

출력

첫 번째 줄에 N보다 큰 특별한 수 중 가장 작은 수를 출력하여라.

예제 입력

2020

예제 출력

2021

내가 했던 풀이 방법

  1. isPrime과 nextPrime 함수를 만든다. isPrime은 int가 소수인지를 판별해주고, nextPrime은 int보다 큰 가장 작은 소수(즉, 연속된 다음 소수)를 리턴해준다.
  2. for문을 돌리면서 해당 i가 소수일 때 연속된 다음 소수를 찾고, 그 둘을 곱한 값이 입력받은 수보다 큰지 확인한다.
  3. 만약 입력받은 수보다 클 경우 둘의 곱을 출력해주고 break으로 종료한다.

코드

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 number = Integer.parseInt(br.readLine());

        for(int i=2; i<10000; i++) {
            if(isPrime(i)) {
                int next = nextPrime(i);
                if(i*next>number) {
                    System.out.print(i*next);
                    break;
                }
            }
        }
    }

    public static boolean isPrime(int number) {
        if(number==2) {
            return true;
        } else {
            for(int i=2; i<number; i++) {
                if(number%i==0) {
                    return false;
                }
            }
        }
        return true;
    }

    public static int nextPrime(int number) {
        for(int i=number+1; i<10000; i++) {
            if(isPrime(i)) return i;
        }
        return 0;
    }
}

회고

문제를 잘 읽어봤으면 금방 풀었을텐데 연속된 두 소수라는 부분을 놓쳐서 모든 소수를 경우에 두고 풀어서 갈아엎었던 문제... 문제를 제대로 읽으려는 습관을 들이자

profile
Frontend🍓

0개의 댓글