๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

study money ๐Ÿ‘บ

[์‰ฌ์šด ์„ค๋ช…] ๋ฐฑ์ค€ 9251 : LCS( Longest Common Substring ) ๊ธธ์ด ์ฐพ๊ธฐ

www.acmicpc.net/problem/9251

 

9251๋ฒˆ: LCS

LCS(Longest Common Subsequence, ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด)๋ฌธ์ œ๋Š” ๋‘ ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋‘์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ๋˜๋Š” ์ˆ˜์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ACAYKP์™€ CAPCAK์˜ LCS๋Š” ACAK๊ฐ€ ๋œ๋‹ค.

www.acmicpc.net

์ „์ฒด์ ์ธ ์ด ๋ฌธ์ œ ๊ฐ์ƒํ‰ :

 

 DP๋ฌธ์ œ๋Š” ์ง„์งœ ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ’€์–ด๋ด์•ผ๊ฒ ๋„ค์š”.

์†”์งํžˆ ๋งํ•ด์„œ, ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์„œ,  dp๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ์Œฉ์œผ๋กœ ๋– ์˜ฌ๋ฆฌ๊ธฐ์—๋Š” ์–ด๋ ค์›€์ด ๋งŽ์ฃ .

๋งŽ์ด ํ’€์–ด๋ณด๋ฉด์„œ ๊ฐ์„ ์ตํ˜€์•ผํ•  ๊ฒƒ ๊ฐ™์•„์š”.

์ด๋ฒˆ ํ•˜๋ฐ˜๊ธฐ์— ์ฝ”ํ…Œ๋ฅผ 9 ~ 10๊ฐœ๋ฅผ ๋ณด๋ฉด์„œ ๋Š๋‚€ ๊ฑฐ์ง€๋งŒ, ๋ณ€๋ณ„๋ ฅ์„ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ๋กœ ๊ผญ, ์ด ๋””ํ”ผ ๋ฌธ์ œ๊ฐ€ ๋‚˜์™”์–ด์š”.

๋ฐฑ์ค€์— ์žˆ๋Š” ๋‹จ๊ณ„๋ณ„ ํ’€์–ด๋ณด๊ธฐ์— ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ผญ ํ’€์–ด๋ณด๊ธฐ๋ฅผ ๊ถŒํ•ฉ๋‹ˆ๋‹ค.

 

 

์ด ๋ฌธ์ œ ํ’€์ด์˜ ๋ฐฉํ–ฅ์„ฑ :

๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ์„œ ์ƒ๊ฐํ•ด๋ณด์ฃ . ์ „ํ˜•์ ์ธ ๋””ํ”ผ ์œ ํ˜•์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์ด์ฃ .

๋ฌธ์ œ๋ฅผ ๋งค์šฐ ์ž‘์€ ์œ ๋‹›์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ง์ ‘ ํ•ด๋ณธ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด ํŒจํ„ด์ด ๋‚˜์˜จ๋‹ค.

 

" ACAYKP <-> CAPCAK "

 

 ์šฐ์„  ๋นˆ ๋ฌธ์ž์—ด ""๊ณผ "C" "CA" "CAP" "CAPC" "CAPCA" "CAPCAK"์˜ LCS๊ธธ์ด๋Š” ๋ชจ๋‘ 0์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด, ๋นˆ ๋ฌธ์ž์—ด๊ณผ ์–ด๋–ค ๊ณตํ†ต๋œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ์žˆ๊ฒ ์Šต๋‹ˆ๊นŒ? ์—†์ฃ .

 

 ์ด์ œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์—ด์—์„œ "A"๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์ฃ .  

"C" : 0๊ฐœ

"CA" : 1๊ฐœ

"CAP" : 1๊ฐœ

"CAPC" : 1๊ฐœ

"CAPCA" : 1๊ฐœ

"CAPCAK" : 1๊ฐœ

๋งž์ฃ ?

 

 ์ด ์›๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•ด์„œ ๋‹ค์Œ์˜ ํ‘œ๋ฅผ ์ฑ„์›Œ ๋‚˜๊ฐ€ ๋ณด์„ธ์š”. ์Šค์Šค๋กœ. ๋‘ ๋ฒˆ์งธ ์ค„๊นŒ์ง€๋Š”, ์จ๋†จ์Šต๋‹ˆ๋‹ค.

์—ฐ์Šตํ•ด๋ด์š” : )

 ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด, ์ด ํ‘œ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒจํ„ด์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋น„๊ต๋˜๊ณ  ์žˆ๋Š” ํ–‰๊ณผ ์—ด์˜ ๊ธ€์ž๊ฐ€ ๊ฐ™์œผ๋ฉด, ๋‘ ๋‹จ์–ด ๋ชจ๋‘์—์„œ ๋”ฑ ์ด์ „ ๋ฒˆ์งธ ๊ธ€์ž๊นŒ์ง€์˜ LCS์— 1์„ ๋”ํ•ด์„œ ์ž์‹ ์˜ ์นธ์˜ ๊ฐ’์œผ๋กœ ์ทจํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ฐ™์ง€ ์•Š์œผ๋ฉด์š”? ๊ทธ๋Ÿฌ๋ฉด, ๋‹จ์–ด1์—์„œ์˜ ์ด์ „ ๋ฒˆ์งธ ๊ธ€์ž๊นŒ์ง€์™€ ๋‹จ์–ด2์˜ ํ˜„์žฌ ๋ฒˆ์งธ ๊ธ€์ž๊นŒ์ง€์˜ LCS์™€ <-> ๋‹จ์–ด2์—์„œ์˜ ์ด์ „ ๋ฒˆ์งธ ๊ธ€์ž๊นŒ์ง€์™€ ๋‹จ์–ด1์˜ ํ˜„์žฌ ๋ฒˆ์งธ ๊ธ€์ž๊นŒ์ง€์˜ LCS ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ์ทจํ•œ ๊ฒƒ์ด ๊ณง ํ˜„์žฌ ์นธ์˜ LCS ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ถ€๋ถ„ ๋ถ€๋ถ„ ๋‚˜๋ˆ„์–ด์„œ, ์ ์  ์Œ“์•„๋‚˜๊ฐ€๋Š” ๊ฑฐ๊ณ , ๊ทธ๋Ÿฌ๊ธฐ์—๋Š” ํ‘œ ๊ตฌ์กฐ๋ฅผ ์“ฐ๋Š” ๊ฒŒ ์‰ฝ๊ฒ ์ฃ ? ( ์‚ฌ์‹ค ์ง€๊ธˆ ์ €๋กœ์„œ๋Š” ์ „ํ˜€ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค๋งŒ ... )

 

๋งˆ์ ธ ํ‘œ๋ฅผ ์ฑ„์›Œ๋ณผ๊ฒŒ์š”.

์˜ˆ์‹œ์— ๋‚˜์˜จ ๊ฒƒ์€ ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๊ฒ ๋„ค์š”.  ์•„์ด๋””์–ด๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณด๊ธฐ ์ด์ „์—” ๋งค์šฐ ์ฐฝ์˜์ ์ด์–ด์•ผ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ ๊ฐ™์•„์š”. ์•„๋ฌดํŠผ ์ €๋Š” ๊ทธ๋ž˜์š”  : ( 

 

๊ณง ๋‹จ์–ด ์ „์ฒด์— ๋Œ€ํ•œ ๋‹ต์€, ์ € ํ‘œ์˜ ๋งˆ์ง€๋ง‰ ์นธ( ์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„  ๋งˆ์ง€๋ง‰ )์˜ 4๊ฐ€ ๋˜๊ฒ ๋„ค์š”. 

 

 

์ด๋ฒˆ ๋ฌธ์ œ LCS์˜ ๊ธฐ๋ณธ์ ์ธ ์•„์ด๋””์–ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์งš๊ณ  ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜์ฃ  :

 

" ๋‹จ์–ด1, ๋‹จ์–ด2์˜ ์ด๋ฒˆ ๊ธ€์ž ๊นŒ์ง€์˜ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„์€, 

   

    ๋งŒ์•ฝ ๊ฐ ๋‹จ์–ด์˜ "์ด๋ฒˆ ๊ธ€์ž"๊ฐ€ ๊ฐ™๋‹ค๋ฉด,

 

        ๊ฐ ๋‹จ์–ด์˜ ์ด์ „ ๊ธ€์ž๊นŒ์ง€์˜ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๊ธธ์ด + 1

 

    ๋งŒ์•ฝ ์ด๋ฒˆ ๊ฐ ๋‹จ์–ด์˜ "์ด๋ฒˆ ๊ธ€์ž"๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฉด,

 

        ๋ฐ‘์˜ ๋‘๊ฐœ ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ์ทจํ•œ๋‹ค.

           

             1. ๋‹จ์–ด1์˜ ์ด์ „ ๊ธ€์ž ๊นŒ์ง€์™€ ๋‹จ์–ด2์˜ ์ด๋ฒˆ ๊ธ€์ž๊นŒ์ง€์˜ ์ตœ์žฅ ๊ณตํ†ต๋ถ€๋ฌธ ๊ธธ์ด.

             2. ๋‹จ์–ด2์˜ ์ด์ „ ๊ธ€์ž ๊นŒ์ง€์™€ ๋‹จ์–ด1์˜ ์ด๋ฒˆ ๊ธ€์ž๊นŒ์ง€์˜ ์ตœ์žฅ ๊ณตํ†ต๋ถ€๋ฌธ ๊ธธ์ด.

 

     ์ด ๋ฐฉ์‹์œผ๋กœ ํ‘œ๋ฅผ ๋งŒ๋“ค์–ด, ๊ฐ ๋‹จ์–ด์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€๋ฅผ ๋น„๊ตํ•˜์—ฌ, ๊ฒฐ๊ตญ, ๋‘ ๋‹จ์–ด์˜ ์ตœ์žฅ ๊ณตํ†ต ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค. "

 

 

 

๊ฒฐ๋ก  : 

  ๋ฐฑ์ค€์—์„œ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ๋งŒ๋‚˜์„œ, ์–ธ์ œ ํ‘œ๋ฅผ ๊ทธ๋ฆฌ๋ฉด ๋” ์ˆ˜์›”ํ• ์ง€ ๊ฐ์„ ๊ธฐ๋ฅด์ž. ์ด์ƒ์ž…๋‹ˆ๋‹ค.