Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JS
- 과제진행하기
- 비트마스크
- JS스터디
- div2개
- 2023카카오블라인드코테
- 코어자바스크립트
- 백준 알고리즘
- 알고리즘문제풀이
- 이중지도
- 프로그래머스
- React.StrictMode
- c++
- solved.ac골드
- 스택
- Lv3
- 5강클로저
- 알고리즘 문제풀이
- [pccp 기출문제]
- solved.ac플래티넘
- 지도 여러개
- 우박수열정적분
- 타겟넘버
- 최소스패닝트리
- DP
- 백준알고리즘
- pccp기출문제
- Lv2
- 두원사이의정수쌍
- 정렬
Archives
- Today
- Total
호지
[백준 알고리즘] 1644번 소수의 연속 합 본문
에라토스네테네스의 체 알고리즘을 기반으로 문제를 풀었다.
해당 알고리즘으로 n보다 작거나 같은 소수를 prime_list 벡터에 넣었다.
그 후 prime_list 끝부터 처음까지 순차적으로 값을 더하면서 탐색한다.
n과 같은지 확인하고 같으면 cnt를 1증가,
n보다 크면 제일 큰 값을 sum에서 감소한다.
결과적으로 cnt값이 최종 결과값이다.
#include <iostream>
#include <vector>
using namespace std;
bool list[4000001];
int main(){
int n;
cin >> n;
for(int i=2; i<=n; i++){
if(list[i])
continue;
for(int j= i+i; j<=n; j+=i){
list[j] = true;
}
}
vector<int> prime_list;
for(int i=2; i<=n; i++){
if(!list[i])
prime_list.push_back(i);
}
int pos = prime_list.size()-1;
int sum = 0, cnt = 0;
for(int i=pos; i>=0; i--){
sum += prime_list[i];
if(sum == n){
cnt ++;
sum -= prime_list[pos];
pos --;
}
else if(sum > n){
sum -= prime_list[pos];
pos --;
}
}
cout << cnt;
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 알고리즘] 1766번 문제집 문제풀이 c++ (0) | 2022.05.02 |
---|---|
[백준 알고리즘] 1647번 도시 분할 계획 (0) | 2022.05.02 |
[백준 알고리즘] 1562번 계단 수 c++ (0) | 2022.04.30 |
[백준 알고리즘] 1509번 팰린드롬 분할 c++ (0) | 2022.04.26 |
[백준 알고리즘] 1208번 부분 수열의 합2 문제풀이 c++ (0) | 2022.04.21 |
Comments