[๋ฐฑ์ค(BOJ)] 9252_LCS 2 JAVA
๋ฌธ์ : BOJ_9252๋ฒ LCS 2
๋ฌธ์ ์ค๋ช
๋ ๊ฐ์ ๋ฌธ์์ด์ด ์๊ณ , ๊ทธ ๋ฌธ์์ด์ ๊ณตํต๋ถ๋ถ ์์ด ์ค ๊ฐ์ฅ ๊ธด ์์ด์ ์ฐพ๋ ๊ฒ์ด๋ค.
๊ธฐ์กด์ LCS ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์ ์์ด์ ๊ธธ์ด๋ฟ๋ง ์๋๋ผ ์์ด์ด ์ด๋ค ๋ฌธ์์ด์ธ์ง ์ถ๋ ฅํด์ผ ํ๋ค.
Solution
DP
dp[i][j] = ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ ์ธ๋ฑ์ค๊ฐ i, ๋ ๋ฒ์งธ ๋ฌธ์์ด์ ์ธ๋ฑ์ค๊ฐ j ์ผ ๋ ๊ณตํต๋ถ๋ถ ์์ด์ ์ต๋๊ฐ
์ด๋ผ๊ณ ์ ์ํ์.
์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ i ๋ฒ์งธ ๋ฌธ์์ ๋ ๋ฒ์งธ ๋ฌธ์์ด์ j ๋ฒ์งธ ๋ฌธ์๊ฐ ๊ฐ๋ค๋ฉด,dp[i][j] = dp[i-1][j-1] + 1
๋ก dp ๊ฐ์ ํ ๋นํ๋ค.
i์ j์ ์ด์ ํ๋ ์ด์ ์ธ๋ฑ์ค์ dp ๊ฐ์์ ๋ ๋ฌธ์๊ฐ ๊ฐ๋ค๋ฉด ๊ณตํต๋ถ๋ถ ์์ด์ ๊ธธ์ด๊ฐ ๋์ด๋๋ฏ๋ก 1์ ๋ํด์ฃผ๋ ์์ด๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ i ๋ฒ์งธ ๋ฌธ์์ ๋ ๋ฒ์งธ ๋ฌธ์์ด์ j ๋ฒ์งธ ๋ฌธ์๊ฐ ๋ค๋ฅด๋ค๋ฉด,dp[i][j]๋ dp[i][j-1], dp[i-1][j] ์ค ์ต๋๊ฐ
์ด ์ฑ๋ฆฝํ๋ค.
์ฐพ๊ณ ์ ํ๋ i, j์ dp ๊ฐ์์ ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ i ๋ฒ์งธ ๋ฌธ์๋ฅผ ํ์ธํ๊ธฐ ์ or ๋ ๋ฒ์งธ ๋ฌธ์์ด์ j ๋ฒ์งธ ๋ฌธ์๋ฅผ ํ์ธํ๊ธฐ ์ ์ค์ ์ต๋๊ฐ์ dp์ ํ ๋นํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ๊น์ง๋ ๊ธฐ์กด์ ๋ฌธ์ ์ ๊ฐ์ผ๋ฉฐ, lcs ๋ฌธ์์ด์ ์ถ๋ ฅํ๊ธฐ ์ํด ๊ธฐ์กด์ intํ ๋ฐฐ์ด์ด ์๋, int ํ๋์ String ํ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ํด๋์ค(class Node)๋ฅผ ์ ์ธํ์ฌ ํด๊ฒฐํ๋ค.
๋ ๋ฌธ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์ ๊ฐ๋ 1 ์ถ๊ฐํด ์ฃผ์ง๋ง, String์ ํด๋น ๋ฌธ์์ด๋ ๋ํด์ฃผ๋ฉด์ ๋ง์ง๋ง์ ์ต์ข
๋ฌธ์์ด๋ ์ถ๋ ฅํด ์ค๋ค.
Description
nodes[i][j] = new Node(0, "")
๋ก ๋ชจ๋ Node ๊ฐ์ ์ ์ธ ๋ฐ ์ด๊ธฐํํด ์ฃผ์๋ค.- i, j ๋ฒ์งธ์ ์ต์ข ๊ฐ์ nodes[i][j]๊ฐ ์๋ nodes[i+1][j+1]์ ๋ฃ์ด์ฃผ์๋ค.
์์ค ์ฝ๋
import java.io.*;
class Node{
private int val;
private String str;
public Node(int val, String str){
this.val = val;
this.str = str;
}
public void setStr(String str) {
this.str = str;
}
public void setVal(int val) {
this.val = val;
}
public int getVal() {
return val;
}
public String getStr() {
return str;
}
}
public class Main {
public static String str1, str2;
public static int n,m;
public static Node[][] nodes;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
str1 = br.readLine();
str2 = br.readLine();
n = str1.length();
m = str2.length();
nodes = new Node[n+1][m+1];
for(int i=0; i<=n; i++){
for(int j=0; j<=m; j++){
nodes[i][j] = new Node(0,"");
}
}
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if (str1.charAt(i)==str2.charAt(j)){
nodes[i+1][j+1].setVal(nodes[i][j].getVal()+1);
nodes[i+1][j+1].setStr(nodes[i][j].getStr()+str1.charAt(i));
}
else{
if(nodes[i+1][j].getVal() >= nodes[i][j+1].getVal()){
nodes[i+1][j+1].setVal(nodes[i+1][j].getVal());
nodes[i+1][j+1].setStr(nodes[i+1][j].getStr());
}
else{
nodes[i+1][j+1].setVal(nodes[i][j+1].getVal());
nodes[i+1][j+1].setStr(nodes[i][j+1].getStr());
}
}
}
}
bw.write(String.valueOf(nodes[n][m].getVal())+"\n");
bw.write(nodes[n][m].getStr()+"\n");
bw.flush();
br.close();
bw.close();
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ณด์ ์ค๊ธฐ(2001) (0) | 2022.03.17 |
---|---|
[BOJ] ๊ฒฝ์์ ์ ์ผ(18405) (0) | 2022.03.16 |
[BOJ] ์นํจ ๋ฐฐ๋ฌ(15686) (0) | 2022.03.16 |
[BOJ] ์๊ธฐ ์์ด(16236) (0) | 2022.03.15 |
[BOJ] ํ์ฑ ํฐ๋(2887) (0) | 2022.03.15 |