언뜻 보기에는 쉬운 문제 같지만 사실 시간 때문에 고민을 좀 해야 하는 문제이다.
짝수인 수를 소수인 두 수의 합으로 나타내라는 문제이다.
import java.util.*;
import java.io.*;
class Main{
static int check(int i) {
int j;
int ok = 0;
for(j = 3;j*j<=i;j++) {
if(i%j == 0) {
ok = 1;
break;
}
}
return ok;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while(true) {
int n = Integer.parseInt(br.readLine());
if(n == 0) break;
int i;
int j;
int k = 1;
int ok = 0;
int nn = 0;
for(i = 3;i<n;i+=2) {
if(check(i) == 0) {
ok = 1;
if(check(n-i) == 0) break;
}
}
if(ok == 1) {
sb.append(n).append(" = ").append(i).append(" + ").append(n-i).append("\n");
}
else sb.append("Goldbach's conjecture is wrong.\n");
}
System.out.println(sb);
}
}
우선 3부터 2씩 늘려가면서 소수인지 판단하고 n에서 그 수를 뺀 수도 소수인지 판단하게 하였다. 그리고 StringBuilder을 통해 출력 시간을 줄여주었다.
나는 옛날에 책으로 공부할 때 소수를 판단하는 함수를 for문을 해당 수의 루트만큼만 돌리면 된다는 걸 배운 적이 있지만 이걸 몰랐던 사람들은 많이 어려웠을 수도 있을 것 같다.
알아야 할 점:
1. StringBuilder을 할 때 변수와 문자를 함께 써야할 경우 append를 사용하여 연결해준다.
2. 소수인지 모두 다 판단할필요가 없으니 그때그때 판단하기 위해 함수를 사용한다.
다른 사람의 코드와 다른 점 : 없다
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
백준 [java 자바] 1629번 : 곱셈 (0) | 2022.08.13 |
---|---|
백준 [java 자바] 2447번 : 별찍기-10 (0) | 2022.08.12 |
백준 [java 자바] 1074번 : Z (0) | 2022.08.11 |
백준 [java 자바] 1946번 : 신입사원 (0) | 2022.08.10 |
백준 [java 자바] 3000번 : 직각 삼각형 (0) | 2022.08.10 |