2018/10 3

백준 1644번 - 소수의 연속합

백준 1644번 - 소수의 연속합https://www.acmicpc.net/problem/1644 문제2 이상의 자연수가 주어졌을 때,이 자연수를 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 경우의 수예를 들어,41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 입력자연수 N (1 ≤ N ≤ 4,000,000) 출력경우의 수 접근에라토스테네스의 체를 활용하여 n 까지의 소수를 미리 구함투 포인터를 활용하여 포인터 2개 사이의 구간합을 구해가며 n가 같음을 확인구간합이 n보다 작으면 우측의 포인터를 증가구간합이 n보다 크거나 같으면 좌측의 포인터를 증가우측의 포인터가 끝에 도달하면 종료C++ Code#include #include #include #include using na..

아카이빙/BOJ 2018.10.21

백준 11778번 - 피보나치 수와 최대공약수

백준 11778번 - 피보나치 수와 최대공약수https://www.acmicpc.net/problem/11778 문제n 번째 피보나치 수와 m 번째 피보나치 수의 최대공약수를 구해보자. 입력n과 mn과 m은 1,000,000,000,000,000,000보다 작거나 같은 자연수 출력n 번째 피보나치 수와 m 번째 피보나치 수의 최대공약수를 1,000,000,007으로 나눈 나머지 접근최대공약수는 유클리드 호제법으로 구한다.GCD(a, b) = GCD(b, a % b)피보나치 수는 수가 매우 크기 때문에 DP로 구하면 시간초과행렬 곱셈을 활용하여 O(log N)의 시간복잡도로 피보나치 수를 구해야한다.C++ Code#include #include #include #include using namespace ..

아카이빙/BOJ 2018.10.21

백준 2143번 - 두 배열의 합

백준 2143번 - 두 배열의 합https://www.acmicpc.net/problem/2143 문제배열 A와 B가 있다.부배열은 배열의 부분 배열이다.A = {1, 3, 1, 2}, B = {1, 3, 2} 인경우, A와 B의 부배열 합이 T인 경우의 수를 모두 찾아라. 입력첫째 줄 : T(-1,000,000,000 ≤ T ≤ 1,000,000,000) 다음 줄 : n(1 ≤ n ≤ 1,000) A[1] 부터 A[n]까지 입력다음 줄 : m(1 ≤ n ≤ 1,000) B[1] 부터 B[n]까지 입력 출력경우의 수를 출력없을 경우 0을 출력 접근A로 만들 수 있는 부배열의 합을 미리 다 구한다.B로 만들 수 있는 부배열의 합을 미리 다 구한다.B를 정렬 (바이너리 서치를 위함)A의 원소를 하나씩 탐색하..

아카이빙/BOJ 2018.10.21