250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 막내의막무가내 알고리즘
- 막무가내
- 막내의막무가내 프로그래밍
- 프래그먼트
- 막내의막무가내 플러터
- Fragment
- 막내의막무가내 코틀린
- 안드로이드 sunflower
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 코볼 COBOL
- 프로그래머스 알고리즘
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 rxjava
- 막내의막무가내 SQL
- 막내의막무가내 플러터 flutter
- 막내의 막무가내 알고리즘
- 부스트코스에이스
- 막내의막무가내 목표 및 회고
- 막내의 막무가내
- 안드로이드 Sunflower 스터디
- 2022년 6월 일상
- 막내의막무가내 안드로이드
- 주엽역 생활맥주
- 부스트코스
- flutter network call
- 막내의막무가내
- 안드로이드
- 막내의막무가내 일상
- 주택가 잠실새내
- 막내의막무가내 안드로이드 코틀린
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 백준 9251 LCS -dp- 자바 코틀린 본문
728x90
https://www.acmicpc.net/problem/9251
LCS란 Longest Common Subsequence 로 최장 부분 수열을 말합니다. 이전 dp 문제들에서도 부분 수열문제들을 풀었었는데 이번 문제는 하나의 문자열 또는 집합이 아닌 두개의 문자열 비교까지 했어야 했습니다.
풀다가 모르겠어서 다음 사이트를 참고하였습니다.
https://jaesungbong.tistory.com/21
https://ghkvud2.tistory.com/107
그리고 학교에서 과제로 했었는데 그 이후로 알고리즘을 안해서인지 기억이 안나더라고요. 복습좀 해야겠습니다.
https://github.com/mtjin/University/tree/master/algorithm/8
www.youtube.com/watch?v=nyXkaHUahHk
풀이는 다음과 같습니다. 중요하므로 꼭 기억하고 복습한번 해야겠습니다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.next();
String b = sc.next();
int[][] LCS = new int[a.length()+1][b.length()+1];
for (int i=1; i<=a.length(); i++){
for (int j=1; j<=b.length(); j++){
if(a.charAt(i-1) == b.charAt(j-1)){
LCS[i][j] = LCS[i-1][j-1] + 1;
}else {
LCS[i][j] = Math.max(LCS[i][j-1], LCS[i -1][j]);
}
}
}
System.out.println(LCS[a.length()][b.length()]);
}
}
[2020-10-06 복습]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line1 = sc.next();
String line2 = sc.next();
int[][] lcs = new int[line1.length() + 1][line2.length() + 1];
for (int i = 1; i <= line1.length(); i++) {
for (int j = 1; j <= line2.length(); j++) {
if (line1.charAt(i - 1) == line2.charAt(j - 1)) {
lcs[i][j] = lcs[i - 1][j - 1] + 1;
} else {
lcs[i][j] = Math.max(lcs[i - 1][j], lcs[i][j - 1]);
}
}
}
System.out.println(lcs[line1.length()][line2.length()]);
}
}
import java.util.*
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
val line1 = sc.next()
val line2 = sc.next()
val lcs = Array(line1.length + 1) { IntArray(line2.length + 1) }
for (i in 1..line1.length) {
for (j in 1..line2.length) {
if (line1[i - 1] == line2[j - 1]) {
lcs[i][j] = lcs[i - 1][j - 1] + 1
} else {
lcs[i][j] = Math.max(lcs[i - 1][j], lcs[i][j - 1])
}
}
}
println(lcs[line1.length][line2.length])
}
댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!
728x90
'알고리즘 > DP' 카테고리의 다른 글
[알고리즘] 백준 1912 연속합 -dp- (0) | 2020.06.18 |
---|---|
[알고리즘] 프로그래머스 땅따먹기 -연습문제- -dp- (0) | 2020.05.21 |
[알고리즘] 백준 11054 가장 긴 바이토닉 부분 수열 -dp- (0) | 2020.04.23 |
[알고리즘] 백준 11053 가장 긴 증가하는 부분 수열 -dp- (0) | 2020.04.20 |
[알고리즘] 백준 2156 포도주 시식 -dp- (0) | 2020.04.20 |
Comments