[C] 백준 1644 소수의 연속합

z00m__in·2021년 5월 15일
0

Algorithm - Two Pointer

목록 보기
5/5

https://www.acmicpc.net/problem/1644

문제

하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다.

  • 3 : 3 (한 가지)
  • 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지)
  • 53 : 5+7+11+13+17 = 53 (두 가지)

하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데, 20이 그 예이다. 7+13을 계산하면 20이 되기는 하나 7과 13이 연속이 아니기에 적합한 표현이 아니다. 또한 한 소수는 반드시 한 번만 덧셈에 사용될 수 있기 때문에, 3+5+5+7과 같은 표현도 적합하지 않다.

자연수가 주어졌을 때, 이 자연수를 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 구하는 프로그램을 작성하시오.

제출 15437 정답 비율 42%





코드

#include <stdio.h>
#inclue <stdlib.h>

int main(void) {
	int prime[25] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 };
	int n = 0;
	scanf("%d", &n);


	int cnt = 0, sum = 0;
	int left = 0, right = 0;
	while (right <= 25) {
		if (sum >= n) {
			sum -= prime[left];
			left++;
		}
		else {
			right++;
			sum += prime[right];
		}

		if (sum == n)
			cnt++;
	}
	
	printf("%d", cnt);


}
profile
우당탕탕 기록지

0개의 댓글

관련 채용 정보