알고리즘/DP(5)
-
[백준/C++] 11727번 2×n 타일링 2
문제: www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 문제풀이 DP문제이다. 이 문제의 점화식은 P[i] = 2*P[i-2] + P[i-1] 이다. 10,007로 나눈 나머지를 출력하기 때문에 배열의 크기를 10,007로 선언하였다. 코드 #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin>>n; int arr[10007] = {1, 3}; for(int i=2..
2021.02.17 -
[백준/C++] 11726번 2×n 타일링
문제: www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 문제풀이 DP문제이다. 경우의 수가 피보나치 수열을 이룬다. 10,007로 나눈 나머지를 출력하기 때문에 배열의 크기를 10,007로 선언하였다. 코드 #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin>>n; int arr[10007] = {1, 2}; for(int i=2; i
2021.02.17 -
[백준/C++] 9461번 파도반 수열
문제: www.acmicpc.net/problem/9461 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net 문제풀이 DP문제이다. 문제의 점화식 P[i] = P[i-5] + P[i-1] 주의할 점은 배열을 선언할 때 long long 형으로 선언해주어야 한다는 것이다. 처음 문제를 풀 때 int 형으로 선언하여 9%에서 계속 틀려서 헤매었다. 코드 #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int T..
2021.02.17 -
[백준/C++] 1676번 팩토리얼 0의 개수
문제: www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제풀이 입력 N에 대하여 N! 이 일의 자리부터 처음 0이 아닌 숫자가 나올 때까지의 0의 개수를 구하는 문제이다. 0의 개수는 N! 를 소인수 분해해서 성분 2와 5의 개수를 구한 다음 둘 중 더 작은 것의 개수를 출력하면 된다. 코드 #include using namespace std; struct tf{ //2와 5의 개수 int two; int five; }; int func2(int num){ //2의 개수 구하기 int cnt2 = 0; while(num%2==0){ num /..
2021.02.13 -
[백준/C++] 1003번 피보나치 함수
문제: www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 문제풀이 fibonacci(N) 일 때의 0과 1을 각각 몇 번씩 호출하는지를 물어보는 문제이다. fibonacci(N)은 fibonacci(N-2) + fibonacci(N-1) 을 호출하기 때문에 우리가 피보나치 수열을 구할 때 앞의 두 수의 합을 구하듯이 0과 1의 호출 또한 앞선 두 수의 합을 구하면 된다. 이때 N은 40과 작거나 같은 자연수이므로 벡터를 41의 크기로 선언하여 0과 1의 호출 수를 저장하였다. 0 호출 1 호출 fibonacci(0) 0 1 0 fibonacci(1) 1 0..
2021.02.13