728x90
코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | O |
4948번: 베르트랑 공준
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼
www.acmicpc.net
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//임의의 자연수를 받기 위한 변수
int num;
//시간복잡도를 잡기 위해서 이미 확인한 숫자들은 소수인지 아닌지 boolean으로 구분하며 해시맵에 담아둠
HashMap<Integer, Boolean> map = new HashMap<>();
//숫자를 받아오면서 바로 num에 담고, 담은 숫자가 0일 때까지 반복
while ((num = Integer.parseInt(br.readLine())) != 0) {
//출력용 숫자를 모을 변수
int result = 0;
//임의의 자연수 n보다 크고, 2n보다 작거나 같아야 하기 때문에 범위는 n+1 ~ 2n까지임
for (int i = num + 1; i <= 2 * num; i++) {
//만약 map에 숫자가 없으면
if (map.getOrDefault(i, null) == null) {
//소수인지 파악하기
boolean check = true;
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
check = false;
break;
}
}
//check가 true이면 소수, false이면 소수가 아닌 숫자
//그대로 map에 넣고, result 값도 추가
map.put(i, check);
result += check ? 1 : 0;
} else { //만약 map에 있으면 map의 boolean에 따라 result 값 추가
result += map.get(i) ? 1 : 0;
}
}
bw.write(result + "\n");
}
bw.flush();
bw.close();
}
}
문제 | 결과 | 메모리 | 시간 | 코드 길이 |
4948 | 맞았습니다!! | 218672 KB | 648 ms | 835 B |
728x90
'코딩테스트 > 백준' 카테고리의 다른 글
[Java] 백준 - 4949번 : 균형잡힌 세상 (Silver IV) (0) | 2022.08.23 |
---|---|
[Java] 백준 - 10828번 : 스택 (Silver IV) (0) | 2022.08.22 |
[Java] 백준 - 4673번: Self Numbers (Silver V) (0) | 2022.08.19 |
[Java] 백준 - 1296번: 팀 이름 정하기 (Bronze I) (0) | 2022.08.18 |
[Java] 백준 - 1110번 : 더하기 사이클 (Bronze I) (0) | 2022.08.18 |