QA & Engineering Blog

A Blog about Quality ยท Automation ยท Engineering

๐Ÿ  ํ™ˆ์œผ๋กœ

[Gold V] LCS - 9251

๋ฌธ์ œ ๋งํฌ

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 56548 KB, ์‹œ๊ฐ„: 528 ms

๋ถ„๋ฅ˜

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(dp), ๋ฌธ์ž์—ด(string)

๋ฌธ์ œ ์„ค๋ช…

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

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

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

๐Ÿ’ก Solutions

๐Ÿ“„ LCS.py

text1 = list(input()) # ๊ธ€ 1
text2 = list(input()) # ๊ธ€ 2
words = set(text1) & set(text2)
lt1 = len(text1)
lt2 = len(text2)

'''
๊ธ€์ž๋ฅผ ํƒ์ƒ‰์„ ํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„์— ๋Œ€ํ•œ ๊ฐ’์„ ์ฐพ์•„๋ณด๊ธฐ ์œ„ํ•ด
dp ํ˜น์€ ํƒ์ƒ‰(์ด๋ถ„ํƒ์ƒ‰)์„ ์ง„ํ–‰ ํ•˜๋ ค๊ณ  ํ–ˆ์—ˆ์Œ.
์ด๋ถ„ ํƒ์ƒ‰์„ ํ•˜๊ธฐ์—” ์‹ค๋ ฅ์ด ์กฐ๊ธˆ ๋ถ€์กฑํ•ด dp๋ฅผ ์ˆ˜ํ–‰

0 0 A C A Y K P
0 0 0 0 0 0 0 0
C 0 0 1 1 1 1 1
A 0 1 1 2 2 2 2
P 0 0 0 0 0 0 0
C 0 0 0 0 0 0 0
A 0 0 0 0 0 0 0
K 0 0 0 0 0 0 0
 -> ๊ณผ ๊ฐ™์ด matrix ๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ  
 ๊ฒน์น˜๋Š” ๊ฐ’์ด ์žˆ์„ ๋Œ€ 1 ์”ฉ ๋Š˜๋ ค์ฃผ๋ฉด ๊ฒฐ๊ณผ ๊ฐ’์ด ๋‚˜์˜ด
 Padding์„ ์ค€ ์ด์œ ๋Š” idx์˜ ํŽธ์˜์„ฑ ๋„ ์žˆ์ง€๋งŒ, ์ดˆ๊ธฐ์˜ ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ 
 matrix[-1][-1] ์ด ๋˜์–ด ์ด์ „์˜ ๊ฐ’์„ ๋ฐ›์•„์˜ค๋Š” ์ผ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด 
 padding์„ ์„ค์ •
'''

matrix =[[0 for _ in range(lt1+1)] for _ in range(lt2+1)]
ans = 0
for i in range(1,lt2+1):
  for j in range(1,lt1+1):
    if text2[i-1] == text1[j-1]:        # matrix์— ์žˆ๋Š” ๊ธ€์ž๊ฐ€ ๋™์ผํ•˜๋‹ดใ„ด
      matrix[i][j] = matrix[i-1][j-1]+1 # 1์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

    else:                         
      matrix[i][j] = max(matrix[i-1][j],matrix[i][j-1])
      # text1 ์—์„œ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ฐ€์ ธ์˜ค๋Š” ๋ฌธ์ž์—ด๊ณผ
      # text2 ์—์„œ(์ด์ „์—์„œ ๋ถ€ํ„ฐ ์Œ“์•„์˜จ) ๋ฌธ์ž์—ด๊ณผ
      # ๊ณ„์‚ฐ๋˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ ํฐ๊ฐ’์„ ๊ฐ€์ ธ์˜ด

print(matrix[lt2][lt1])