์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/BOJ_Java

[BOJ/Step9] 9020 : ๊ณจ๋“œ๋ฐ”ํ์˜ ์ถ”์ธก (JAVA)

NaNaRin๐Ÿ™ƒ 2021. 1. 19. 20:34

www.acmicpc.net/problem/9020

 

9020๋ฒˆ: ๊ณจ๋“œ๋ฐ”ํ์˜ ์ถ”์ธก

1๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ  1๊ณผ ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ ์•ฝ์ˆ˜๊ฐ€ ์—†๋Š” ์ž์—ฐ์ˆ˜๋ฅผ ์†Œ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 5๋Š” 1๊ณผ 5๋ฅผ ์ œ์™ธํ•œ ์•ฝ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์ˆ˜์ด๋‹ค. ํ•˜์ง€๋งŒ, 6์€ 6 = 2 × 3 ์ด๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์ˆ˜๊ฐ€ ์•„

www.acmicpc.net


๋ฌธ์ œ

1๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ  1๊ณผ ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ ์•ฝ์ˆ˜๊ฐ€ ์—†๋Š” ์ž์—ฐ์ˆ˜๋ฅผ ์†Œ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 5๋Š” 1๊ณผ 5๋ฅผ ์ œ์™ธํ•œ ์•ฝ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์ˆ˜์ด๋‹ค. ํ•˜์ง€๋งŒ, 6์€ 6 = 2 × 3 ์ด๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.

๊ณจ๋“œ๋ฐ”ํ์˜ ์ถ”์ธก์€ ์œ ๋ช…ํ•œ ์ •์ˆ˜๋ก ์˜ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๋กœ, 2๋ณด๋‹ค ํฐ ๋ชจ๋“  ์ง์ˆ˜๋Š” ๋‘ ์†Œ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ˆ˜๋ฅผ ๊ณจ๋“œ๋ฐ”ํ ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ๋˜, ์ง์ˆ˜๋ฅผ ๋‘ ์†Œ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œํ˜„์„ ๊ทธ ์ˆ˜์˜ ๊ณจ๋“œ๋ฐ”ํ ํŒŒํ‹ฐ์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7์ด๋‹ค. 10000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ชจ๋“  ์ง์ˆ˜ n์— ๋Œ€ํ•œ ๊ณจ๋“œ๋ฐ”ํ ํŒŒํ‹ฐ์…˜์€ ์กด์žฌํ•œ๋‹ค.

2๋ณด๋‹ค ํฐ ์ง์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์˜ ๊ณจ๋“œ๋ฐ”ํ ํŒŒํ‹ฐ์…˜์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋งŒ์•ฝ ๊ฐ€๋Šฅํ•œ n์˜ ๊ณจ๋“œ๋ฐ”ํ ํŒŒํ‹ฐ์…˜์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ์—๋Š” ๋‘ ์†Œ์ˆ˜์˜ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ  ์ง์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ ์ฃผ์–ด์ง„ n์˜ ๊ณจ๋“œ๋ฐ”ํ ํŒŒํ‹ฐ์…˜์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ถœ๋ ฅํ•˜๋Š” ์†Œ์ˆ˜๋Š” ์ž‘์€ ๊ฒƒ๋ถ€ํ„ฐ ๋จผ์ € ์ถœ๋ ฅํ•˜๋ฉฐ, ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

์ œํ•œ

4 ≤ n ≤ 10,000

 

์˜ˆ์ œ ์ž…๋ ฅ 1

3

8

10

16

 

์˜ˆ์ œ ์ถœ๋ ฅ 1

3 5

5 5

5 11


ํ’€์ด

์ˆซ์ž n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ n/2์—์„œ ํ•˜๋‚˜์”ฉ ๋”ํ•˜๊ณ  ๋นผ๋ฉฐ ๋‘ ์ˆ˜ ๋ชจ๋‘ ์†Œ์ˆ˜์ธ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์œผ๋ฉด ๋‘ ์ˆ˜์˜ ์ฐจ๊ฐ€ ๊ฐ€์žฅ ์ž‘๋‹ค.

   ( 8์ผ๋•Œ 4, 4 -> 3, 5 / 10์ผ๋•Œ 5, 5 / 16์ผ๋•Œ 8, 8 -> 7, 9 -> 6, 10 -> 5, 11)

1. ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑ

   1-1. 1 ~ 10000 ์‚ฌ์ด์˜ ๋ชจ๋“  ์†Œ์ˆ˜๊ฐ€ ์ €์žฅ๋œ prime ๋ฐฐ์—ด, prime๋ฐฐ์—ด์˜ ๊ธธ์ด primeIdx, ์†Œ์ˆ˜ ์—ฌ๋ถ€๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆซ์ž num์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ

   1-2. ์†Œ์ˆ˜์ผ ๋•Œ ํ•ด๋‹น ์†Œ์ˆ˜์˜ prime ๋ฐฐ์—ด index๋ฅผ, ์†Œ์ˆ˜๊ฐ€ ์•„๋‹๋•Œ -1์„ ๋ฐ˜ํ™˜

2. ์ˆซ์ž n์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด (n/2 -i, n/2 +i) (i ๋Š” 0๋ถ€ํ„ฐ n/2๊นŒ์ง€) ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จ

3. ๋‘˜๋‹ค ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ ์ถœ๋ ฅ

 

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

public class B9020 {
	
	static int isPrime(int[] a, int length, int num) {
		for(int i = 0; i < length; i++) {
			if(a[i]==num)
				return i;
		}
		return -1;
	}

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int t = sc.nextInt();
		
		int prime[] = new int[1300];
		int primeIdx = 1;
		prime[0] = 2;
		prime[1] = 3;
		
		Loop1 :
		for(int i = 4; i <= 10000; i++) {
			for(int j = 0; j < primeIdx; j++) {
				if(i % prime[j] == 0) {
					continue Loop1;
				} else {
					
				}
			}
			prime[++primeIdx] = i;
		}
		
		for(int i = 0; i < t; i++) {
			int n = sc.nextInt();
			int num1 = -1;
			int num2 = -1;
			
			for(int j = 0; j < n / 2; j++) {
				num1 = isPrime(prime, primeIdx, (n/2)-j);
				num2 = isPrime(prime, primeIdx, (n/2)+j);
				if ( num1 != -1 && num2 != -1) {
					break;
				}
			}
			bw.write(prime[num1] + " " + prime[num2]);
			bw.newLine();
		}
		bw.flush();
	}
}