반응형
🔺 문제
1644번: 소수의 연속합
첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000)
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.util.*;
import java.io.*;
public class Main {
static boolean[] isPrime;
static ArrayList<Integer> numbers = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
// 1. 소수 구하기
isPrime = new boolean[N + 1];
isPrime[0] = isPrime[1] = true;
for(int i = 2 ; i <= (int)Math.sqrt(N) ; i++) {
if(isPrime[i]) continue;
for(int j = i * i ; j <= N ; j += i) {
isPrime[j] = true;
}
}
for(int i = 1 ; i <= N ; i++) {
if(!isPrime[i])
numbers.add(i);
}
// 2. 연속합으로 주어진 정수 구할 수 있는지 판별
int start = 0, end = 0, sum = 0, cnt = 0;
while(true) {
if(sum >= N)
sum -= numbers.get(start++);
else if(end == numbers.size())
break;
else
sum += numbers.get(end++);
if(N == sum) cnt++;
}
System.out.println(cnt);
}
}
|
cs |
✅ 해결 아이디어
✔ 에라토스테네스의 체 + 투 포인터
1. 소수 구하기 → 에라토스테네스의 체 이용
2. 소수의 연속 합으로 주어진 정수 구할 수 있는지 판단하기 → 투 포인터
- 자연수가 주어지고, 연속되었다는 점에서 투 포인터 사용 가능
💥 유의사항
• 투 포인터 움직일 때 리스트 범위 잘 지키기!
🔺 다른 풀이들
- 에라토스테네스의 체 + 투 포인터 사용하신 풀이!! 그림 짱..
[백준] 1644번 소수의 연속합 (자바 풀이)
문제 https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 풀이 이 문제는 에라토스테네스의 체로 소수를 구한 다음, 투 포인터 알고
code-lab1.tistory.com
💬 느낀 점
오왓 오랜만에 에라토스테네스의 체 풀려다 잊고....
투 포인터도 넘 오랜만이고...ㅎ
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[JAVA] 백준 1644 문제 - 소수의 연속합
백준 1644 문제 정리 글입니다. (최적화된 답은 아니니 참고만 하시기 바랍니다.) 백준 1644문제 소수의 연속함 해당 문제를 풀기 위해서는 두개 단계를 고려 해야 한다. 1. 소수 구하기. 2. 소수의
firework-ham.tistory.com
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 16917번: 양념 반 후라이드 반 (0) | 2023.07.11 |
---|---|
[백준/JAVA] 7662번: 이중 우선순위 큐 (0) | 2023.07.11 |
[백준/JAVA] 4179번: 불! (0) | 2023.07.10 |
[백준/JAVA] 19637번: IF문 좀 대신 써줘 (0) | 2023.07.08 |
[백준/JAVA] 7576번: 토마토 (0) | 2023.07.08 |