Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable
๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜/ETC

์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด(Longest Common Subsequence - LCS)

์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด(Longest Common Subsequence - LCS)
๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜/ETC

์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด(Longest Common Subsequence - LCS)

2023. 4. 1. 22:43

1. ๊ฐœ๋… ๐Ÿข

  ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด(Longest Common Subsequence)์ด๋ž€ ์ฃผ์–ด์ง„ ์ˆ˜์—ด์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด์—์„œ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ์—ฐ์†์ ์ผ ํ•„์š”๋Š” ์—†๋‹ค.

 

2. ๋™์ž‘๋ฐฉ์‹ ๐ŸฆŽ

  ๋™์ž‘ ๋ฐฉ์‹์€ DP๋ฅผ ์ด์šฉํ•œ๋‹ค. ๋ฌธ์ž์—ด A์™€ ๋ฌธ์ž์—ด B๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•˜์ž.

  1. ๋ฌธ์ž์—ด A์™€ ๋ฌธ์ž์—ด B๋ฅผ ํ•œ ๊ธ€์ž์”ฉ ๋น„๊ตํ•œ๋‹ค.
  2. ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด DP[i][j] = DP[i - 1][j - 1] + 1์ด ๋œ๋‹ค.
    ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด DP[i][j]๋Š” DP[i-1][j]์™€ DP[i][j-1] ์ค‘์— ํฐ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
  3. 1๋ฒˆ๊ณผ 2๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

  ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” DP[i][j]๋Š” ๋ฌธ์ž์—ด A๋Š” i๋ฒˆ์งธ๊นŒ์ง€ ๋ฌธ์ž์—ด B๋Š” j๋ฒˆ์งธ๊นŒ์ง€ ๊ณ ๋ คํ•˜์˜€์„ ๊ฒฝ์šฐ์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด์ด๋‹ค. i์™€ j๋Š” 1๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊นŒ์ง€ ์ˆœํšŒํ•˜๊ณ  i ๋˜๋Š” j๊ฐ€ 0์ธ ์žฅ์†Œ์˜ DP ๊ฐ’์€ 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

  • ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ™์„ ๋•Œ 'DP[i][j] = DP[i - 1][j - 1] + 1'์ธ ์ด์œ 
      ์ด์ „ ์ƒํ™ฉ๊นŒ์ง€์˜ ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์— ํ˜„์žฌ ๋น„๊ต๋œ ๊ฐ™์€ ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
  • ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ™์„ ๋•Œ 'DP[i][j] = max(DP[i-1][j], DP[i][j-1])'์ธ ์ด์œ 
      ํ•ด๋‹น ๊ณผ์ •์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์—์„œ์˜ ๋ถ€๋ถ„์ˆ˜์—ด์€ ์—ฐ์†์ ์ผ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋‹ค์‹œ ์ธ์ง€ํ•ด์•ผ ํ•œ๋‹ค. ์—ฐ์†์ ์ผ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋น„๋ก ์ง€๊ธˆ ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„ ์ด์ „๊นŒ์ง€์˜ ์ƒํ™ฉ์—์„œ ์–ป์€ ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์„ ๊ณ„์†ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
      ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์ด์ „๊นŒ์ง€์˜ ์ƒํ™ฉ์€ DP[i-1][j]์™€ DP[i][j-1]์„ ์˜๋ฏธํ•œ๋‹ค. (์ตœ์žฅ๊ณตํ†ต๋ฌธ์ž์—ด์˜ ๋™์ž‘๋ฐฉ์‹๊ณผ ๋น„๊ตํ•ด ๋ณธ๋‹ค๋ฉด ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.)

  'ABCDEF'์™€ 'GBCDFE'๋ฅผ ์ด์šฉํ•˜์—ฌ LCS๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ทธ๋ฆผ์„ ์ด์šฉํ•˜์—ฌ ์ดํ•ดํ•˜์—ฌ ๋ณด์ž.

  ์œ„์˜ ๊ณผ์ •์„ ํ†ตํ•ด 'ABCDEF'์™€ 'GBCDFE'์˜ ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์€ 'BCDF', 'BCDE'๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  ์œ„์˜ ๊ณผ์ •์„ ํ™œ์šฉํ•œ๋‹ค๋ฉด ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์ธ 'BCDF'์™€ 'BCDE'๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๊ณผ์ •์€ ์œ„์˜ ๋™์ž‘๋ฐฉ์‹์„ ์—ญ์ˆœ์œผ๋กœ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์„ ์ €์žฅํ•  ๋ฐฐ์—ด์„ LCS๋ผ๊ณ  ํ•˜์ž.

  1. DP์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
  2. DP[i-1][j]์™€ DP[i][j-1] ์ค‘ ํ˜„์žฌ ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ฐพ๋Š”๋‹ค.
  3. ๊ฐ™์€ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐ’์œผ๋กœ ์ด๋™ํ•œ๋‹ค.
    ๊ฐ™์€ ๊ฐ’์ด ์—†๋‹ค๋ฉด LCS์— ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ๋„ฃ๊ณ  DP[i-1][j-1]๋กœ ์ด๋™ํ•œ๋‹ค.
  4. 2๋ฒˆ๊ณผ 3๋ฒˆ ๊ณผ์ •์„ 0์„ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • DP[i-1][j]์™€ DP[i][j-1] ์ค‘ ํ˜„์žฌ ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ
      ์ด์ „ ์ƒํ™ฉ๊ณผ ํ˜„์žฌ ์ƒํ™ฉ์„ ๋น„๊ตํ•˜์˜€์„ ๋•Œ ๊ฐ™์€ ๋ฌธ์ž๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ์ด๋‹ค. ๊ทธ๋ž˜์„œ LCS์— ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • DP[i-1][j]์™€ DP[i][j-1] ์ค‘ ํ˜„์žฌ ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ
      ์ด์ „ ์ƒํ™ฉ๊ณผ ํ˜„์žฌ ์ƒํ™ฉ์„ ๋น„๊ตํ•˜์˜€์„ ๋•Œ ๊ฐ™์€ ๋ฌธ์ž๋ฅผ ์ฐพ์•„์„œ DP๊ฐ’์— ๋ณ€ํ™”๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒฝ์šฐ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ•ด๋‹น ๊ฐ’์„ LCS์— ์ €์žฅํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  ์œ„์˜ ๊ณผ์ •์„ ๋งˆ์น˜๊ฒŒ ๋œ๋‹ค๋ฉด LCS์— ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์ด ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค.

 

3. ๊ตฌํ˜„(JAVA) ๐Ÿ

  DP์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ์ฃผ์–ด์ง„ ์ˆ˜์—ด์˜ ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ตœ์žฅ๊ณตํ†ต๋ฌธ์ž์—ด์—์„œ ์ฒ˜๋Ÿผ ์ตœ๋Œ€๊ธธ์ด๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

public static void main(String[] args) {
    String A = "ABCDEF";
    String B = "GBCDFE";
    int aStrLen = A.length();
    int bStrLen = B.length();
    int[][] DP = new int[aStrLen + 1][bStrLen + 1];

    for(int i = 1; i <= aStrLen; i++) {
        for(int j = 1; j <= bStrLen; j++) {
            // ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ
            if(A.charAt(i - 1) == B.charAt(j - 1)) {
                DP[i][j] = DP[i - 1][j - 1] + 1;
            }
            // ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ
            else {
                DP[i][j] = Math.max(DP[i - 1][j], DP[i][j - 1]);
            }
        }
    }

    System.out.println(DP[aStrLen][bStrLen]);
}

 

ํ•ด๋‹น ๊ธ€์€ emplam27 ๋‹˜์˜ '๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด๋Š” LCS ์•Œ๊ณ ๋ฆฌ์ฆ˜'์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

'๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ > ETC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ตœ์žฅ๊ณตํ†ต๋ฌธ์ž์—ด(Longest Common Substring - LCS)  (0) 2023.04.01
์ตœ์žฅ์ฆ๊ฐ€๋ถ€๋ถ„์ˆ˜์—ด(Longest Increasing Subsequence - LIS)  (0) 2023.04.01
์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint-sets)  (0) 2023.03.01
  • 1. ๊ฐœ๋… ๐Ÿข
  • 2. ๋™์ž‘๋ฐฉ์‹ ๐ŸฆŽ
  • 3. ๊ตฌํ˜„(JAVA) ๐Ÿ
'๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜/ETC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์ตœ์žฅ๊ณตํ†ต๋ฌธ์ž์—ด(Longest Common Substring - LCS)
  • ์ตœ์žฅ์ฆ๊ฐ€๋ถ€๋ถ„์ˆ˜์—ด(Longest Increasing Subsequence - LIS)
  • ์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint-sets)
Amenable
Amenable
CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.