01-09 04:37
Recent Posts
Recent Comments
관리 메뉴

miinsun

[BAEKJOON] λ°±μ€€ κΈ°λ³Έ μˆ˜ν•™ 2 9020 :: κ³¨λ“œλ°”νμ˜ μΆ”μΈ‘ λ³Έλ¬Έ

Algorithm/Baekjoon

[BAEKJOON] λ°±μ€€ κΈ°λ³Έ μˆ˜ν•™ 2 9020 :: κ³¨λ“œλ°”νμ˜ μΆ”μΈ‘

miinsun 2022. 4. 11. 13:51

πŸ’¬  문제 μ„€λͺ…

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

 

​

πŸ’»  Main.java

 

  • μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체둜 μ „λ²”μœ„(1 ~ 10,000)의 μ†Œμˆ˜λ₯Ό νŒλ³„ν•΄μ€€λ‹€.
  • μž…λ ₯ xλ₯Ό λ°›κ³  x / 2λ₯Ό κΈ°μ€€μœΌλ‘œ a, bλ₯Ό μ„€μ •ν•œλ‹€.
  • a, bκ°€ λͺ¨λ‘ μ†Œμˆ˜μ΄λ©΄ λ°˜λ³΅λ¬Έμ„ μ€‘μ§€ν•˜κ³ , μ†Œμˆ˜κ°€ μ•„λ‹ˆλ©΄ 같은 차이둜 λ²Œμ–΄μ§€κ²Œ ν•œλ‹€.(+1, -1)

 

/* λ°±μ€€ κΈ°λ³Έ μˆ˜ν•™ 2 - 9020 :: κ³¨λ“œλ°”νμ˜ μΆ”μΈ‘ */
import java.io.*;

public class Main {
	public static boolean[] prime;
	
	// μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 : μ†Œμˆ˜ κ΅¬ν•˜κΈ°
	public static void isDecimal() {
		// true = μ†Œμˆ˜ μ•„λ‹˜ , false = μ†Œμˆ˜
		prime[0] = prime[1] = true;
		
		// μ œκ³±κ·ΌκΉŒμ§€ 반볡
		for(int i = 2; i <= Math.sqrt(prime.length); i++) {
			if(prime[i]) continue;
			for(int j = i * i; j < prime.length; j += i) {
				prime[j] = true;
			}
		}
	}
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		prime = new boolean[10001];
		int n = Integer.parseInt(br.readLine());
		
		// μ „λ²”μœ„μ˜ μ†Œμˆ˜ 유무 κ΅¬ν•˜κΈ°
		isDecimal();
		
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i < n; i++) {
			int tmp = Integer.parseInt(br.readLine());
			
			// 기쀀값은 tmp / 2κ°€ λœλ‹€.
			int a = tmp / 2, b = tmp / 2;
			while(true) {
				if(!prime[a] && !prime[b]) {
					// a, b 두 수 λͺ¨λ‘ μ†Œμˆ˜λ©΄ λ°˜λ³΅λ¬Έμ„ μ€‘μ§€ν•œλ‹€
					sb.append(a + " " + b).append('\n');
					break;
				}
				else {
					// κΈ°μ€€κ°’μ—μ„œ ν•œμΉΈμ”© λ²Œμ–΄μ§€κ²Œν•œλ‹€
					a--;
					b++;
				}
			}
		}
		
		System.out.println(sb);
		br.close();
	}
}
Comments