๋ฌธ์
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]);
}
}
}
'๐ Algorithm > BaekJoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ(Java) [๋ฐฑ์ค] 2739๋ฒ : ๊ตฌ๊ตฌ๋จ (0) | 2023.01.13 |
---|---|
์๋ฐ(Java) [๋ฐฑ์ค] 2884๋ฒ : ์๋ ์๊ณ (2) | 2023.01.10 |
์๋ฐ(Java) [๋ฐฑ์ค] 2480๋ฒ : ์ฃผ์ฌ์ ์ธ๊ฐ (1) | 2023.01.09 |
์๋ฐ(Java) [๋ฐฑ์ค] 2525๋ฒ : ์ค๋ธ ์๊ณ (1) | 2023.01.09 |
์๋ฐ(Java) [๋ฐฑ์ค] 14681๋ฒ : ์ฌ๋ถ๋ฉด ๊ณ ๋ฅด๊ธฐ (1) | 2023.01.09 |