GiantStepDEV

๋ฌธ์ œ

KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด KMP์ธ ์ด์œ ๋Š” ์ด๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ์˜ ์„ฑ์ด Knuth, Morris, Prett์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ๋ฐœ๊ฒฌํ•œ ์‚ฌ๋žŒ์˜ ์„ฑ์„ ๋”ฐ์„œ ์ด๋ฆ„์„ ๋ถ™์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ, ์œ ๋ช…ํ•œ ๋น„๋Œ€์นญ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ RSA๋Š” ์ด๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์ด Rivest, Shamir, Adleman์ด๋‹ค.

์‚ฌ๋žŒ๋“ค์€ ์ด๋ ‡๊ฒŒ ์‚ฌ๋žŒ ์„ฑ์ด ๋“ค์–ด๊ฐ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๋ถ€๋ฅธ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ๋Š” ์„ฑ์„ ๋ชจ๋‘ ์“ฐ๊ณ , ์ด๋ฅผ ํ•˜์ดํ”ˆ(-)์œผ๋กœ ์ด์–ด ๋ถ™์ธ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, Knuth-Morris-Pratt์ด๋‹ค. ์ด๊ฒƒ์„ ๊ธด ํ˜•ํƒœ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ๋กœ ์งง์€ ํ˜•ํƒœ๋Š” ๋งŒ๋“  ์‚ฌ๋žŒ์˜ ์„ฑ์˜ ์ฒซ ๊ธ€์ž๋งŒ ๋”ฐ์„œ ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, KMP์ด๋‹ค.

๋™ํ˜์ด๋Š” ๋งค์ผ๋งค์ผ ์ž์‹ ์ด ํ•œ ์ผ์„ ๋ชจ๋‘ ๋ฉ”๋ชจ์žฅ์— ์ ์–ด๋†“๋Š”๋‹ค. ์ž ์„ ์ž๊ธฐ ์ „์—, ์˜ค๋Š˜ ํ•˜๋ฃจ ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ๋˜์ƒˆ๊ฒจ ๋ณด๋Š” ๊ฒƒ์œผ๋กœ ํ•˜๋ฃจ๋ฅผ ๋งˆ๊ฐํ•œ๋‹ค.

ํ•˜๋ฃจ๋Š” ์ด ๋ฉ”๋ชจ๋ฅผ ๋ณด๋˜ ์ค‘, ์ง€๊ธˆ๊นŒ์ง€ ๊ธด ํ˜•ํƒœ์™€ ์งง์€ ํ˜•ํƒœ๋ฅผ ์„ž์–ด์„œ ์ ์–ด ๋†“์€ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ธด ํ˜•ํƒœ๋กœ ํ•˜๋ฃจ ์ผ์„ ๊ธฐ๋กํ•˜๋‹ค๊ฐ€๋Š” ๋ฉ”๋ชจ์žฅ ๊ฐ€๊ฒฉ์ด ๋ถ€๋‹ด๋˜์–ด ํŒŒ์‚ฐ๋  ๊ฒƒ์ด ๋ป”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์•ž์œผ๋กœ๋Š” ์งง์€ ํ˜•ํƒœ๋กœ ๊ธฐ๋กํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๊ธด ํ˜•ํƒœ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ์งง์€ ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ์–ด ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ž…๋ ฅ์€ ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ตœ๋Œ€ 100๊ธ€์ž์˜ ์˜์–ด ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž, ๊ทธ๋ฆฌ๊ณ  ํ•˜์ดํ”ˆ ('-', ์•„์Šคํ‚ค์ฝ”๋“œ 45)๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ธ€์ž๋Š” ํ•ญ์ƒ ๋Œ€๋ฌธ์ž์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ , ํ•˜์ดํ”ˆ ๋’ค์—๋Š” ๋ฐ˜๋“œ์‹œ ๋Œ€๋ฌธ์ž์ด๋‹ค. ๊ทธ ์™ธ์˜ ๋ชจ๋“  ๋ฌธ์ž๋Š” ๋ชจ๋‘ ์†Œ๋ฌธ์ž์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ ์ค„์— ์งง์€ ํ˜•ํƒœ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•) split

package KMP๋ฌธ์ œ0110;
import java.util.Scanner;

public class StringKmp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("์ž…๋ ฅ ํ•˜์„ธ์š”. : ");
        String name = sc.next();
        
        String[] kmp = name.split("-");
        for(int i=0; i<kmp.length; i++) {
            char firstName = kmp[i].charAt(0);
            System.out.print(firstName);
        }
    }
}

๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•) ๋Œ€๋ฌธ์ž๋งŒ ์ฐพ๊ธฐ

package KMP๋ฌธ์ œ0110;
import java.util.Scanner;

public class StringKmp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("์ž…๋ ฅ ํ•˜์„ธ์š”. : ");
        String name = sc.next();
        
        for(int i=0; i<name.length(); i++) {
            if(name.charAt(i) >= 'A' && name.charAt(i) <= 'Z') {
                System.out.print(name.charAt(i));
            }
        }
    }
}

์„ธ๋ฒˆ์งธ ๋ฐฉ๋ฒ•) ๋ฌธ์ž ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝ ํ›„ ๋Œ€๋ฌธ์ž ์ฐพ๊ธฐ

package KMP๋ฌธ์ œ0110;
import java.util.Scanner;

public class StringKmp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("์ž…๋ ฅ ํ•˜์„ธ์š”. : ");
        String name = sc.next();
        
       char[] kmp2 = name.toCharArray();
        for(int i = 0; i < kmp2.length; i++) {
            if(kmp2[i] >= 'A' && kmp2[i] <= 'Z') System.out.print(kmp2[i]);
        }
    }
}
profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!