Longest Common Subsequence/Substring (LCS) Algorithm
Dynamic Programming 카테고리의 알고리즘입니다. 두 개의 문자열이 있다고 가정합시다. 각각 subject, target이라고 부르겠습니다. subject = ACAYKP, target = CAPCAK이라고 합니다. 이 때, subject = ACAYKP의 부분 수열이라 함은 다음을 가리킵니다. 0, A, CAY, CYP, ACAYKP... 등등. 가장 작은 부분 수열은 공집합이며, 가장 큰 부분 수열은 문자열 그 자신입니다. 여기서 중요하게 짚고 넘어가야 할 점이 있습니다. LCS라는 표현을 쓸 때, longest common SUBSEQUENCE인지, longest common SUBSTRING인지 잘 확인해야 합니다. 번역하면 최장 공통 수열, 최장 공통 문자열이 되겠습니다. 이 둘의 ..
2020. 11. 15.
[백준 17498번] 폴짝 게임
난이도: 골드 5 문제 링크: www.acmicpc.net/problem/17498 17498번: 폴짝 게임 첫 번째 줄에 행의 개수 N과 열의 개수 M (2 ≤ N×M ≤ 200,000, 2 ≤ N) 그리고 최대 점프 거리 정수 D (1 ≤ D ≤ 10) 가 주어집니다. i+1 번째 줄에는 i (1 ≤ i ≤ N) 번째 행에 있는 쓰여있는 정수 ai,1, ai,2, www.acmicpc.net 어제 풀었으나 시간 제한에 걸려서 실패했던 문제입니다. (링크) 다이나믹 프로그래밍에 대해 알아보고, 메모이제이션 기법을 활용하여 접근하였더니 성공적으로 풀었습니다. 메모이제이션 개념을 간단히 설명하자면, 중복적으로 계산이 이루어질 법한 상황에, 계산의 값을 미리 담아 둔 배열을 활용하여, 이미 계산이 이루어진 ..
2020. 11. 7.