250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 그린델발트 자전거
- 백준
- 알고리즘
- 백준 C++
- 1654
- 군대코딩
- 16236 c++
- 군대
- openai api
- iles dHyeres
- 프랑스 남부 섬
- 백준으로 c++ 공부하기
- auto code review
- 그린델발트 캠핑장
- 24524
- 오리스프
- 시뮬레이션
- C++ 공부하기
- 로이커바트
- 피르스트 자전거
- 백준으로 C++ 공부
- 군인
- 융프라우 스위스 패스
- 대학생
- porquerolles
- C++ 공부
- 로이커바트 숙소
- C++
- Replit
- 코딩
Archives
- Today
- Total
기억보다는 기록을 해볼까
[백준 9251] LCS (C++) - 45 본문
728x90
문제
https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
생각
문자열에 많이 약하다는 생각으로 넘겼던 문제이다.
그러나 문자열이 아니라고 생각해도 차이가 없다. (선입견)
LCS 알고리즘을 참고했다.
이 문제는 최대 수열의 길이만 구하면 되는 문제이지만 언제든지 최대 수열을 구하라는 문제가 있을 수 있다.
[알고리즘] 그림으로 알아보는 LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence
LCS는 주로 최장 공통 부분수열(Longest Common Subsequence)을 말합니다만, 최장 공통 문자열(Longest Common Substring)을 말하기도 합니다.
velog.io
문자열을 받고나서 int 형으로 바꾸려고 안간힘을 썻지만 그럴 필요가 없는 문제이다.
2차원 dp를 한칸 늘리면 해결이 된다.
코드
#include <iostream>
#include <string>
using namespace std;
string str1, str2;
int dp[1002][1002];
int main() {
cin >> str1 >> str2;
for(int i = 0; i < 1000; i++) {
dp[i][0] = 0;
dp[0][i] = 0;
}
for(int i = 0; i < str1.size(); i++) {
for(int j = 0; j < str2.size(); j++) {
if(str1[i] == str2[j]) dp[i+1][j+1] = dp[i][j] + 1;
else dp[i+1][j+1] = max(dp[i][j+1], dp[i+1][j]);
}
}
cout << dp[str1.size()][str2.size()];
}
728x90
'백준으로 C++ 공부하기' 카테고리의 다른 글
[백준 내려가기] 2096 (C++) - 48 (0) | 2022.01.12 |
---|---|
[백준 1967] 트리의 지름 (C++) - 47 (0) | 2022.01.11 |
[백준 17070] 파이프 옮기 1(C++) - 44 (0) | 2022.01.08 |
[BOJ] 치킨 배달 15686 (C++) - 44 (0) | 2022.01.07 |
[BOJ] 연구소 14502 (C++) - 43 일차 (0) | 2022.01.05 |
Comments