๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ๊ณต๋ถ€/Algorithm

[๋ฐฑ์ค€][Node.js] 2902๋ฒˆ : KMP๋Š” ์™œ KMP์ผ๊นŒ?

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2021. 10. 6.

 

 

Algorithm

-  KMP๋Š” ์™œ KMP์ผ๊นŒ? -

 


 

๋ฌธ์ œ

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

 

๋ฌธ์ œ ํ’€๊ธฐ

let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("-");
let result = input.map((el) => el[0]).join("");

console.log(result);

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€