Tags

32 pages

DP

[Algorithm] C++ 백준 18438 번 : LCS 5

백준 18438 LCS 5는 최대 7000 길이의 두 문자열에 대해 LCS의 길이와 실제 수열을 모두 출력해야 하는 문제입니다. 4MB 메모리 제한 때문에 전형적인 2차원 DP 테이블을 저장할 수 없으므로, O(nm) 시간에 O(min(n,m)) 메모리만 사용하는 Hirschberg 알고리즘으로 안전하게 복원합니다. 전방·후방 1차원 DP, 분할 지점 선택, 경계 처리와 빠른 입출력까지 반영한 C++ 구현과 복잡도 분석을 제공합니다.
[Algorithm] C++ 백준 18438 번 : LCS 5

[Algorithm] C++ 백준 18586번 : Salty Fish

트리의 각 노드 사과를 모두 먹되, 카메라가 보는 구간(p(x,k))의 변화를 막기 위해 일부 카메라를 매수(비용 c)하거나 일부 정점을 포기하는 문제를 최소 컷으로 환원한다. 거대한 일반 네트워크 대신 트리 구조를 활용해 dp(map<depth,sum>)을 small-to-large로 병합하고, 카메라별 커버 가능한 가장 깊은 depth부터 잔여 유량을 소모해 Max-Flow=Min-Cut을 암시적으로 계산, 전체 사과 합 − 유량으로 최대 수익을 구한다. 시간복잡도는 O((n+m) log n)으로 테스트케이스 합 n,m ≤ 10^6에서도 빠르게 동작한다.
[Algorithm] C++ 백준 18586번 : Salty Fish

[Algorithm] C++/Python 백준 1126번 : 같은 탑

백준 1126번 '같은 탑' 문제는 여러 블록을 이용해 두 탑의 높이를 동일하게 만들되 가장 높은 탑의 높이를 최대화하는 최적화 문제입니다. 동적 계획법(DP)을 활용하여 두 탑의 높이 차이와 누적 높이를 효율적으로 관리하며, 상태 전이와 초기화 방안, 구현 방법을 상세하게 다룹니다. 본 글은 C++/Python 예제 코드 및 핵심 아이디어를 포함하여 문제 해결에 필요한 핵심 로직과 최적화 전략을 설명합니다.
[Algorithm] C++/Python 백준 1126번 : 같은 탑

[Algorithm] C++/Python 백준 24505번 : blobhyperthink

이 글에서는 백준 24505번 'blobhyperthink' 문제를 C++ 및 Python을 활용해 효율적으로 푸는 방법을 다룹니다. 최대 10^5 길이의 수열에서 길이가 11인 증가 부분 수열의 개수를 구하기 위해 동적 계획법과 Binary Indexed Tree(Fenwick Tree)를 활용하는 자세한 알고리즘 설계 및 최적화 과정을, 시간 복잡도와 실제 코드 구현과 함께 150자 내외로 명확하게 설명합니다.
[Algorithm] C++/Python 백준 24505번 : blobhyperthink

[Algorithm] C++/Python 백준 12928번 : 트리와 경로의 길이

백준 12928번 트리와 경로의 길이 문제는 N개의 노드와 정확히 S개의 길이가 2인 단순 경로를 갖는 트리의 존재 여부를 판별하는 수학+DP 문제입니다. 각 노드의 차수 분배와 경로 수식 변형을 통해 조건을 수식화하고, N과 S가 작으므로 다이나믹 프로그래밍을 활용해 차수 배치가 충족되는지를 탐색합니다. 수학적 귀납 및 조합 원리를 바탕으로 효율적인 검사를 수행하는 것이 핵심입니다.
[Algorithm] C++/Python 백준 12928번 : 트리와 경로의 길이