백준 9020번 : 골드바흐의 추측[Java]
문제 출처
9020번: 골드바흐의 추측
1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아
www.acmicpc.net
import java.util.Scanner;
public class d021_Q9020 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i = 0; i < T; i++) {
int n = sc.nextInt();
int a = n / 2;
int b = n / 2;
while(true) {
if(check_prime(a) && check_prime(n - a)) {
System.out.println(a + " " + b);
break;
}
else {
a--;
b++;
}
}
}
sc.close();
}
public static boolean check_prime(int n) {
int i = 2;
while(i <= Math.sqrt(n)) {
if(n % i++ == 0) {return false;}
}
return true;
}
}
일단 문제 조건이 두 숫자의 차이가 가장 적게 해야한다는걸 생각해서
각각의 숫자를 a와 b로 놓고 숫자의 절반부터 시작했다.
a는 점점 줄여가고 b는 점점 늘려가다보면
a와 b가 모두 소수인 부분이 나올 것이고 그럼 그게 정답!
while문이 상당히 많은 코드라 시간초과가 나올까봐 두근두근 했는데 문제 조건 10000보다 작은 수가 입력된다는 걸 보고 9998까지 입력했을때 2를 넘지 않길래 제출했고 맞았다.
'문제풀이 > 코딩테스트' 카테고리의 다른 글
백준 3009번 : 네 번째 점[Java] (0) | 2020.09.24 |
---|---|
백준 1085번 : 직사각형에서 탈출[Java] (0) | 2020.09.23 |
백준 4948번 : 베르트랑 공준[Java] (0) | 2020.09.20 |
백준 1929번 : 소수 구하기[Java] (0) | 2020.09.20 |
백준 2581번 : 소수 [Java] (0) | 2020.09.18 |