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

2022. 1. 3. 12:22알고리즘

https://www.acmicpc.net/problem/24039

 

24039번: 2021은 무엇이 특별할까?

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

www.acmicpc.net

 

이 문제는 2021년 마지막 날, Good Bye, BOJ 2021! 대회에서 첫 번째 문제이다.


문제설명

연속한 두 소수의 곱으로 이루어져있으면 그 수를 특별한 수라고 한다.

ex) 2 x 3, 3 x 5, 5 x 7, 7 x 11 등등

그리고 출력은 내가 입력한 수 N보다 큰 특별한 수를 출력하는 것이다.

2020을 입력하면 43 x 47 = 2021이 출력이 되야하는 것

 

코드

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt();
		int result = 0, i, j;
		ArrayList<Integer> list = new ArrayList<Integer>();

		// 10000까지의 소수를 구하는 코드
		for (i = 2; i <= 10000; i++) {
			for (j = 2; j < i; j++) {
				if (i % j == 0) {
					break;
				}
			}

			if (i == j) {
				list.add(i);
			}
		}

		
		for (i = 0; i < list.size(); i++) {
			result = list.get(i) * list.get(i + 1);
			if (result > n) {
				System.out.println(result);
				System.exit(0);
			}
		}
	}
}

 

코드 설명

나는 ArrayList를 이용해서 풀었다. list안에다가 10000까지의 소수들을 넣어놓고 list의 사이즈만큼 for문을 돌려서 

result라는 변수안에 i번째 소수의 값 * i+1번째 소수의 값을 넣었다.

그렇게 값들을 계속 넣는데, 만약 내가 입력한 N의 값보다 커지는 그 순간에, 그 때의 result값을 출력하고 시스템을 종료한다.

 

효율화 때문에 한 번 더 제출...