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

๋ฌธ์ œ

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

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

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

์˜ˆ์ œ


์ฝ”๋“œ

import sys
input = sys.stdin.readline

W1 = input().strip()
W2 = input().strip()

dp = [0]*1000 # LCS ๊ธธ์ด ์ €์žฅ

for i in range(len(W1)):
    mx = 0
    for j in range(len(W2)):
        if mx < dp[j]: # ํ˜„์žฌ๊นŒ์ง€์˜ ์ตœ๋Œ€ ๊ธธ์ด๋กœ ๊ฐฑ์‹ 
            mx = dp[j]
        elif W1[i] == W2[j]:
            dp[j] = mx + 1 # LCS ๊ธธ์ด + 1
            
print(max(dp))

mx๋Š” ํ˜„์žฌ๊นŒ์ง€์˜ ์ตœ๋Œ€ ๊ธธ์ด๋กœ ๊ณ„์†ํ•ด์„œ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.

  • ์ฆ‰, ํ˜„์žฌ ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ์ตœ๋Œ€ LCS ๊ธธ์ด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๊ฐ™์€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋ฐœ๊ฒฌํ•˜๋ฉด, LCS ๊ธธ์ด๋ฅผ +1 ํ•ด์ค€๋‹ค.

์ตœ์ข…์ ์œผ๋กœ ์ €์žฅ๋œ LCS ๊ธธ์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.


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

  1. dp๋ฌธ์ œ์— ๊ต‰์žฅํžˆ ์•ฝํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋œ ๋ฌธ์ œ.. ๋‹ต์„ ๋ณด๊ณ  ๋‚˜๋ฉด ์ •๋ง ๊ฐ„๋‹จํ•œ ๋ฐ ๋– ์˜ฌ๋ฆฌ๊ธฐ๊ฐ€ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹คใ…œ ์•„์ง ๋งŽ์€ ์—ฐ์Šต์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค!
profile
๋ธ”๋กœ๊ทธ ์ด๊ด€ํ•˜์˜€์Šต๋‹ˆ๋‹ค: https://bbbang105.github.io/

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