[๋ฐฑ์ค€] LCS

๊ฐœ๋ฐœ์ž P๊ตฐยท2025๋…„ 6์›” 25์ผ

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
32/57
post-thumbnail

๐Ÿ”— ๋ฌธ์ œ ๋ณด๊ธฐ - [๋ฐฑ์ค€] LCS

๐Ÿ“– ๋ฌธ์ œ

LCS(Longest Common Subsequence, ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด)๋ฌธ์ œ๋Š” ๋‘ ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋‘์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ๋˜๋Š” ์ˆ˜์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ACAYKP์™€ CAPCAK์˜ LCS๋Š” ACAK๊ฐ€ ๋œ๋‹ค.

โœ ์ž…๋ ฅ

์ฒซ์งธ ์ค„๊ณผ ๋‘˜์งธ ์ค„์— ๋‘ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ตœ๋Œ€ 1000๊ธ€์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

๐Ÿ“„ ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‘ ๋ฌธ์ž์—ด์˜ LCS์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

โœ… ์ฝ”๋“œ

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
  
public class Main {  
    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        String firstLine = br.readLine();  
        String secondLine = br.readLine();  
        int[][] arr = new int[firstLine.length() + 1][secondLine.length() + 1];  
  
        for(int i = 1; i <= firstLine.length(); i++) {  
            for(int j = 1; j <= secondLine.length(); j++) {  
                if(firstLine.charAt(i - 1) == secondLine.charAt(j - 1)) {  
                    arr[i][j] = arr[i-1][j-1] + 1;  
                } else {  
                    arr[i][j] = Math.max(arr[i-1][j], arr[i][j-1]);  
                }  
            }  
        }  
  
        System.out.println(arr[firstLine.length()][secondLine.length()]);  
    }  
}

๐Ÿงฉ ์ฝ”๋“œํ’€์ด

LCS๋ฅผ ํ‘ธ๋Š” ๋ฌธ์ œ์ธ๋ฐ ์ ‘ํ•ด๋ณด์ง€ ์•Š์•„์„œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ’€์–ด์•ผํ• ์ง€ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š์•„ ์•„๋ž˜ ์ฃผ์†Œ์—์„œ ์ฐธ๊ณ ํ•˜์—ฌ DP ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•œ๋ฒˆ ์•Œ์•„๋‘๋ฉด LCS๊ฐ€ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ๋“ค์„ ํ’€๋•Œ ์ข€๋” ์ƒ๊ฐ์„ ํ™•์žฅํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ํ•œ๊ธ€์ž์”ฉ ๋น„๊ตํ•˜์—ฌ ๋ฌธ์ž์—ด์ด ๋™์ผํ•˜๋‹ค๋ฉด ์ง€๊ธˆ๊นŒ์ง€์˜ ์ตœ๋Œ€ ๊ณตํ†ต ๋ถ€๋ถ„์ˆ˜์—ด์ธ arr[i-1][j-1]์— 1์„ ๋”ํ•ด์ค€ ๊ฐ’์„ ์ž…๋ ฅํ•ด์ฃผ๊ณ ,
  2. ๋ฌธ์ž์—ด์ด ๋™์ผํ•˜์ง€ ์•Š๋‹ค๋ฉด ย 'ํ˜„์žฌ์˜ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •' ์ด์ „์˜ ๊ณผ์ •์ธ ๋ฐฐ์—ด์˜ arr[i-1][j] ํ˜น์€ arr[i][j-1] ์ค‘ ํฐ ๊ฐ’์„ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.
  3. ๋์œผ๋กœ ๋ฐฐ์—ด์˜ ๋๋ถ€๋ถ„์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ์ˆ˜์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ธธ์ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  - https://velog.io/@emplam27/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-LCS-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Longest-Common-Substring%EC%99%80-Longest-Common-Subsequence#longest-common-subsequence-substring

profile
๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์–ป์€ ์ƒˆ๋กœ์šด ์ง€์‹์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€