문제
레벨: G4
알고리즘: DP
풀이시간: 1시간
힌트 참조 유무: 유
https://www.acmicpc.net/problem/9251
1 번째 시도
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] str1 = br.readLine().toCharArray();
char[] str2 = br.readLine().toCharArray();
int length_1 = str1.length;
int length_2 = str2.length;
// 공집합 표현을 위해 인덱스가 한 줄씩 추가 됨
int[][] dp = new int[length_1 + 1][length_2 + 1];
// 1부터 시작 (index 0 은 공집합이므로 0의 값을 갖고있음)
for(int i = 1; i <= length_1; i++) {
for(int j = 1; j <= length_2; j++) {
// (i-1)과 (j-1) 번째 문자가 서로 같다면
if(str1[i - 1] == str2[j - 1]) {
// 대각선 위 (i-1, j-1)의 dp에 +1 한 값으로 갱신
dp[i][j] = dp[i - 1][j - 1] + 1;
}
// 같지 않다면 이전 열(i-1)과 이전 행(j-1)의 값 중 큰 것으로 갱신
else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
System.out.println(dp[length_1][length_2]);
}
}
'알고리즘 > DP' 카테고리의 다른 글
[백준 11054] 가장 긴 바이토닉 부분 수열 / 자바 /dp (1) | 2024.06.08 |
---|---|
[백준 12865] 평범한 배낭/자바/dp ** (1) | 2024.06.06 |
[백준 2293] 동전1 / 자바 / dp (1) | 2024.06.05 |
[프로그래머스 LV3] 연속 펄스 부분 수열의 합 / 자바 / DP (1) | 2024.06.04 |
[백준] 내리막길/자바 (0) | 2024.05.13 |