티스토리 뷰
반응형
백준 1644 문제 정리 글입니다.
(최적화된 답은 아니니 참고만 하시기 바랍니다.)
백준 1644문제 소수의 연속함
해당 문제를 풀기 위해서는 두개 단계를 고려 해야 한다.
1. 소수 구하기.
2. 소수의 연속 합으로 주어진 정수를 구할 수 있는지 판단하기.
1. 소수 구하기
소수를 구하기 위해서는 에라토스테네스의 체를 이용하면 된다.
자세한 알고리즘은 아래 글에서 확인
https://firework-ham.tistory.com/8
소수를 구하기 위해 아래와 같이 선언하여 주어진 N 사이에 소수를 구한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
static boolean prime[];
static ArrayList<Integer> prime_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. 소수 구하기
prime = new boolean[N+1];
prime[0] = prime[1] = true;
for(int i=2; i*i<=N; i++){
if(!prime[i]) for(int j=i*i; j<=N; j+=i) prime[j]=true;
}
for(int i=1; i<=N;i++){
if(!prime[i]) prime_numbers.add(i);
}
// 2. 연속합으로 주어진 정수 구할 수 있는지 판별
}
}
2. 연속합으로 주어진 정수 구할 수 있는지 판별
연속합으로 주어진 정수를 구할 수 있는지 판별하는 방법은 슬라이딩 윈도우 알고리즘으로 확인하면 된다.
에라토스테네스의 체를 이용해 구한 소수를 가지고 연속합을 만들면서 합이 크면 시작 Index를 늘리고 합이 작으면 끝 Index를 늘리는 방식으로 구한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
static boolean prime[];
static ArrayList<Integer> prime_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. 소수 구하기
prime = new boolean[N+1];
prime[0] = prime[1] = true;
for(int i=2; i*i<=N; i++){
if(!prime[i]) for(int j=i*i; j<=N; j+=i) prime[j]=true;
}
for(int i=1; i<=N;i++){
if(!prime[i]) prime_numbers.add(i);
}
// 2. 연속합으로 주어진 정수 구할 수 있는지 판별
int start=0, end=0, sum=0, count=0;
while(true) {
if(sum >= N ) sum -= prime_numbers.get(start++);
else if(end == prime_numbers.size()) break;
else sum += prime_numbers.get(end++);
if(N==sum) count++;
}
System.out.println(count);
}
}
반응형
'알고리즘 > 백준문제풀이' 카테고리의 다른 글
[JAVA] 백준 1922 문제 - 네트워크 연결 (0) | 2020.02.18 |
---|
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- react
- 넘파이
- 리엑트
- k8s metrics-server running
- LeetCode 풀이
- GPT서비스
- LeetCode 알고리즘 공부
- 머신러닝
- Node
- CHATGOT
- k8s metrics-server
- 퍼셉트론
- LeetCode 5월 챌린지
- 파이썬 numpy
- numpy
- 버츄얼스튜디오코드
- Java
- git
- 30 Day LeetCode Challenge
- 노드
- React 프로젝트 생성
- GPTGOT
- Python
- 에라토스테네스
- Component
- vscode
- 지도학습
- LeetCode 30일 챌린지
- 파이썬
- Java leetcode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함