Baekjoon(130)
-
[BOJ 14728] 벼락치기
- 문제 요약 첫째 줄에는 이번 시험의 단원 개수 N(1(단, 여러 단원을 융합한 문제는 출제하지 않는다. 한 단원에 한 문제를 출제하며, 어떤 단원의 문제를 맞추기 위해서는 그 단원의 예상 공부 시간만큼, 혹은 그보다 더 많이 공부해야만 맞출 수 있다.) - 알고리즘 정리 냅색 문제입니다. dp[x] = max(dp[x], dp[x-(예상 공부 시간)] + (문제 배점의 최대값))위 점화식을 사용하여 해결할 수 있습니다. - 코드 작성 #includeusing namespace std;#define MAX 10001int n,t,dp[MAX],arr[101][2];int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);..
2024.11.19 -
[BOJ 9084] 동전
- 문제 요약 동전의 종류가 주어질 때, 주어진 금액을 만드는 모든 방법을 세는 프로그램을 작성하시오.입력의 첫 줄에는 테스트케이스의 수 T가 주어진다.각 테스트케이스의 첫 번째 줄에는 동전의 가지 수 N(1(같은 동전이 여러 번 주어지는 경우는 없다. 방법의 수는 2^31-1보다 작다.) - 알고리즘 정리 DP[i] (i원을 만들 수 있는 방법의 수)DP[i] = DP[i] + DP[i - (동전의 금액)] - 코드 작성 #includeusing namespace std;#define MAX 10001typedef long long ll;int t,n,m,arr[21],dp[MAX];int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout..
2024.11.18 -
[BOJ 15989] 1, 2, 3 더하기 4
- 문제 요약 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.합을 나타낼 때는 수를 1개 이상 사용해야 하며, 합을 이루고 있는 수의 순서만 다른 것은 같은 것으로 친다.(테스트케이스의 수 T가 주어진다. n은 양수이며 10,000보다 작거나 같다.) - 알고리즘 정리 DP 문제입니다. DP[X][a] (정수 X를 만들 때 a로 끝나는 경우의 수) DP[i][1] = DP[i-1][1] DP[i][2] = DP[i-2][1] + DP[i-2][2] DP[i][3] = DP[i-3][1] + DP[i-3][2] + DP[i-3][3] - 코드 작성 #includeusing namespace std;#define MAX 10001int t,n,dp..
2024.11.18 -
[BOJ 2225] 합분해
- 문제 요약 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오.덧셈의 순서가 바뀐 경우는 다른 경우로 센다. (1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다.첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.(1 - 알고리즘 정리 DP 문제입니다. dp[K][N] = X (K개를 더해서 N을 만들 수 있는 경우의 수가 X)dp[K][N] = dp[K-1][0] + dp[K-1][1] + ... + dp[K-1][N] 위와 같이 점화식을 작성하면 문제를 해결할 수 있습니다. - 코드 작성 #includeusing namespace std;#define MAX 201typedef long long ll;l..
2024.11.18 -
[BOJ 1074] Z
- 문제 요약 크기가 2^N x 2^N인 2차원 배열을 Z모양으로 탐색하려고 한다.아래의 사진은 2^2 x 2^2 크기의 배열을 방문한 순서이다.N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오. (1 ≤ N ≤ 15 / 0 ≤ r, c - 알고리즘 정리 분할정복을 이용하여 해결했습니다. 2^N 크기의 배열을 십자 모양으로 4등분 해서, 각 블록마다 재귀를 돌려줍니다.r과 c가 현재 블럭블록 안에 있다면 그 상태로 재귀를 돌리고, 만약 현재 블록 안에 없다면 현재 블록의 크기만큼 탐색을 마치고 다음 블록으로 넘어간다는 소리가 됩니다. 그러므로 현재 블록의 넓이를 결괏값에 더해주면 됩니다. - 코드 작성 #includeusing namespace std;int n,r..
2024.11.18 -
[BOJ 27496] 발머의 피크 이론
- 문제 요약 발머의 피크 이론이란 혈중 알코올 농도 C가 (0.129 - 알고리즘 정리 알코올의 양을 입력받으면서, 그때그때 if문으로 비교해 주면 됩니다.(혈중 알코올 농도가 유지되는 시간을 result에 더해주면서 반복문 계속 돌려주기) - 코드 작성 #includeusing namespace std;#define MAX 1000001typedef long long ll;int n,l,result;ll sum;int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n>>l; vectorv(n,0); for(int i=0;i>v[i]; sum+=v[i]; if(i>=l){ sum-=v[i-l]; ..
2024.09.21