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 Substring - LCS)

์ตœ์žฅ๊ณตํ†ต๋ฌธ์ž์—ด(Longest Common Substring - LCS)
๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜/ETC

์ตœ์žฅ๊ณตํ†ต๋ฌธ์ž์—ด(Longest Common Substring - LCS)

2023. 4. 1. 09:40

  ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ LCS๋ฅผ ๊ตฌ๋ณ„ํ•˜๋„๋ก ํ•˜์ž. ์ผ๋ฐ˜์ ์œผ๋กœ LCS๋ผ๊ณ  ํ•˜๋ฉด ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด(Longest Common Subsequence)์„ ๋œปํ•˜์ง€๋งŒ, ์ตœ์žฅ๊ณตํ†ต ๋ฌธ์ž์—ด(Longest Common Sustring)๋„ LCS๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. ๋‘˜์˜ ์ฐจ์ด์ ์€ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ์—ฐ์†์„ฑ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

  ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ตœ์žฅ๊ณตํ†ต ๋ฌธ์ž์—ด(Longest Common Substring)์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์•Œ์•„๋ณด์ž

 

1. ๊ฐœ๋… ๐Ÿฆ†

  ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„๋ฌธ์ž์—ด(LCS)์€ ์—ฐ์†๋œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ค‘ ๊ฐ€์žฅ ๊ธธ์ด๊ฐ€ ๊ธด ๋ฌธ์ž์—ด์„ ๋งํ•œ๋‹ค. 

 

2. ๋™์ž‘ ๋ฐฉ์‹ ๐Ÿ“

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

  1. ๋ฌธ์ž์—ด A์™€ ๋ฌธ์ž์—ด B๋ฅผ ํ•œ ๊ธ€์ž์”ฉ ๋น„๊ตํ•œ๋‹ค.
  2. ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด DP[i][j]๋Š” DP[i-1][j-1] + 1์ด ๋œ๋‹ค.
    ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด DP[i][j]์— 0์„ ํ‘œ์‹œํ•œ๋‹ค.
  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] = 0'์ด ๋˜๋Š” ์ด์œ 
    ์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„๋ฌธ์ž์—ด์€ ์—ฐ์†๋œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ „์ œ๋กœ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์†์„ฑ์ด ์—†์–ด์ง€๋ฉด 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.

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

 

3. ๊ตฌํ˜„(JAVA) ๐Ÿฆข

  i ๋˜๋Š” j๊ฐ€ 0์ด๋ผ๋ฉด DP(๋น„๊ต๋ฅผ ํ•˜์ง€ ์•Š์€ ์ƒํ™ฉ)์˜ ๊ฐ’์ด 0์ด๋ผ๋Š” ๊ฒƒ๋งŒ ์ฃผ์˜ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๋ณด๋„๋ก ํ•˜์ž.

public static void main(String[] args) {
    String A = "ABCDEF";
    String B = "GBCDFE";
    int aStrLen = A.length();
    int bStrLen = B.length();
    // LCS์˜ ๊ธธ์ด
    int maxLen = 0;
    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;
                maxLen = Math.max(maxLen, DP[i][j]);
            }
            // ๋น„๊ตํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ
            else {
                DP[i][j] = 0;
            }
        }
    }

    System.out.println(maxLen);
}

 

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

 

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

์ตœ์žฅ๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด(Longest Common Subsequence - 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 Subsequence - 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 + /
โ‡ง + /

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