https://www.acmicpc.net/problem/9252

๋ฌธ์ œ

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

์˜ˆ๋ฅผ ๋“ค์–ด, ACAYKP์™€ CAPCAK์˜ LCS๋Š” ACAK๊ฐ€ ๋œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„๊ณผ ๋‘˜์งธ ์ค„์— ๋‘ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ตœ๋Œ€ 1000๊ธ€์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‘ ๋ฌธ์ž์—ด์˜ LCS์˜ ๊ธธ์ด๋ฅผ, ๋‘˜์งธ ์ค„์— LCS๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

LCS๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜๊ณ , LCS์˜ ๊ธธ์ด๊ฐ€ 0์ธ ๊ฒฝ์šฐ์—๋Š” ๋‘˜์งธ ์ค„์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ์ œ


์ฝ”๋“œ

import sys
input = sys.stdin.readline
dp = ['']*1000
w1 = input().strip()
w2 = input().strip()
for i in range(len(w1)):
    temp = ''
    for j in range(len(w2)):
        # temp๋ฅผ ๊ณ„์†ํ•ด์„œ LCS๋กœ ๊ฐฑ์‹ ํ•ด์คŒ
        if len(temp) < len(dp[j]):
            temp = dp[j]
        # LCS์— ๋ฌธ์ž์—ด ํ•˜๋‚˜๊ฐ€ ๋” ๋ถ™๋Š” ๊ฒฝ์šฐ
        elif w1[i] == w2[j]:
            dp[j] = temp + w2[j]
            
dp = list(set(dp)) # ์ค‘๋ณต ์ œ๊ฑฐ
dp = sorted(dp,key = lambda x : -len(x)) # ๋ฌธ์ž ๊ธธ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
LCS = dp[0]
if LCS:
    print(len(LCS))
    print(LCS)
else:
    print(0)

temp์—๋Š” LCS๋งŒ์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

ํ˜„์žฌ์˜ LCS๊ฐ€ ๋“ค์–ด๊ฐ„ ์ƒํƒœ์—์„œ, ๋˜ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ์ถ”๊ฐ€ํ•ด์„œ ๋„ฃ์–ด์ค€๋‹ค.

# LCS์— ๋ฌธ์ž์—ด ํ•˜๋‚˜๊ฐ€ ๋” ๋ถ™๋Š” ๊ฒฝ์šฐ
elif w1[i] == w2[j]:
	dp[j] = temp + w2[j]

์ด์™€ ๊ฐ™์€ ์ž‘์—…์„ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ์‹คํ–‰ํ•œ๋‹ค.

dp๋ฅผ ๊ฐ€์ง€๊ณ  ์ตœ์ข…์ ์ธ LCS๋ฅผ ๊ตฌํ•œ๋‹ค.

dp๋Š” 1000๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ์ด๊ธฐ์—, ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์ง‘ํ•ฉ์„ ํ™œ์šฉํ•œ๋‹ค.

dp = list(set(dp)) # ์ค‘๋ณต ์ œ๊ฑฐ

์ด ์ค‘์—์„œ ๊ฐ€์žฅ ๊ธด ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด, ์ฆ‰ LCS๋ฅผ ์ฐพ์•„์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์ •๋ ฌํ•œ๋‹ค.

dp = sorted(dp,key = lambda x : -len(x)) # ๋ฌธ์ž ๊ธธ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
  • dp[0] ์—๋Š” ๊ฐ€์žฅ ๊ธด ๋ฌธ์ž์—ด์ด ์žˆ๊ฒŒ ๋˜๊ณ , ์ด๋Š” LCS์— ํ•ด๋‹นํ•œ๋‹ค.

LCS๋ฅผ ๊ธธ์ด์™€ ํ•จ๊ป˜ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

  • ๋งŒ์•ฝ LCS๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด, 0๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.

๋А๋‚€ ์  & ๋ฐฐ์šด ์ 

  1. LCS 1 ๋ฌธ์ œ๋ฅผ ํ’€๊ณ , ๋ฌธ์ž์—ด๋„ ์ €์žฅํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ dp์•ˆ์— ๊ธธ์ด๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์—ด ์ž์ฒด๋ฅผ ์ €์žฅํ•ด์ฃผ๋ฉฐ ํ•ด๊ฒฐํ–ˆ๋‹ค.

  2. ์ž…๋ ฅ์ด ๋งŽ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—์„œ๋Š” ์ด์™€ ๊ฐ™์ด ์ถฉ๋ถ„ํžˆ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค!

profile
๋ธ”๋กœ๊ทธ ์ด๊ด€ํ•˜์˜€์Šต๋‹ˆ๋‹ค: https://bbbang105.github.io/

0๊ฐœ์˜ ๋Œ“๊ธ€