[백준] 9095번 1, 2, 3 더하기 (C++) - 간단한 dp
2023. 3. 22. 19:12
카테고리 없음
1. 발상 간단한 dp를 이용해 문제를 해결했다. i의 합 -> (i-1)의 합 + (i-2) 의 합 + (i-3) 의 합 base case -> (dp[1] = 1, dp[2] =2, dp[3] = 4) 로 설정한다. 2. 소스코드 #include #include #include using namespace std; int dp[12] = {0, }; int main(){ cin.tie(NULL); ios::sync_with_stdio(false); int T; cin >> T; dp[1] = 1; dp[2] = 2; dp[3] = 4; for(int i=4; i N; cout
[백준] 2839번 설탕 배달 (C++) - 간단한 dp
2023. 3. 22. 16:13
solving/C, C++
1. 발상 우선 아이디어는 다음과 같다. 설탕 5kg, 3kg이 있으므로 -> 이번 회차의 최소 설탕봉지 개수는 (이번회차-3) / (이번회차-5) 둘 중 최솟값을 구해 거기에 +1봉지를 더한 값이다. base case : dp[3] = 1, dp[5] =1, 모든 dp 배열의 값은 0으로 초기 설정한다. 예외 존재) dp[i-3], dp[i-5] 둘 중 하나만 가능한 경우: 둘 중 존재하는 값 + 1 로 설정해야 한다. 예외처리를 위해 IF, ELSE IF, ELSE문 이용하였다. 2. 소스코드 #include #include #include using namespace std; int dp[5001] = {0, }; int main(){ cin.tie(NULL); ios::sync_with_stdio..

[백준] 11660번 구간 합 구하기 5 (C++) - 간단한 dp
2023. 3. 21. 21:47
solving/C, C++
2. 소스코드 1. 전체 소스코드 #include #include #include using namespace std; int N, M; int arr[1025][1025] = {0, }; int dp[1025][1025] = {0, }; int main(){ cin.tie(NULL); ios::sync_with_stdio(false); cin >> N >> M; for(int i=1; i arr[i][j]; } } for(int i=1; i> y1 >> x2 >> y2; cout
[백준] 14501번 퇴사 - C++ (Bruteforce, 재귀함수)
2022. 10. 8. 18:57
solving/C, C++
발상 1. 우선 알고리즘 중 bruteforce를 이용해야겠다고 생각했다. 1~N까지 날짜 중 되는 상담을 잡았을 때의 최대 값을 구하는 것이고, A일이라면 A+1일의 상담에 걸리는 날짜부터 N까지를 다시 탐색하는 방법으로 문제를 해결하면 될 것이라고 생각했다. 2. 종료하는 분기점은 date가 N보다 클 때이다. 이 때 종료하고, 그 이전의 cost값을 v에 push해준다. 그런데 date=N+1일 때는 실제로는 직전에 시작한 상담이 마지막 날에 정확히 끝나는 것이므로, (예로, N이 7일 때, 5일에 3만큼의 상담을 했다면, date=8이 되어 종료되지만 실제로는 5, 6, 7일 3일간 상담을 하고 8로 넘어가므로 date=8도 유효한 값이다.) 이 때의 cost값도 v에 push해준 뒤 return..