deo2kim
๋งž์™œํ‹€
deo2kim
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • ๊ฐœ๋ฐœ
    • Infra

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
deo2kim

๋งž์™œํ‹€

[python] ๋ฐฑ์ค€ - 9251. LCS
Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 9251. LCS

2020. 9. 22. 08:51
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

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

 

LCS๋ž€ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด(Longest Common Subsequence)์ด๋‹ค.

์ˆœ์„œ๋Š” ๋งž์ง€๋งŒ ์—ฐ์†ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ABCAB์™€ BDCB๊ฐ€ ์žˆ๋‹ค. ABCAB ์™€ BDCB ์˜ LCS๋Š” BCB์ด๋‹ค.

 

LCS๊ฐ€ ๋ญ”์ง€ ์•ˆ๋‹ค๊ณ  ํ•ด๋„ ์ฒ˜์Œ ์ ‘ํ•˜๋ฉด ๊ตฌํ•˜๋Š”๊ฑด ๋‹น์—ฐํžˆ ์–ด๋ ต๋‹ค. ์™„์ „ํƒ์ƒ‰์„ ํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์—ญ์‹œ๋‚˜ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. 

๋ฌธ์ œ ํ•ด๊ฒฐ๋ฒ•์ด DP์ด๊ณ  ๋‹ค๋ฅธ ๊ณ ์ˆ˜๋“ค์˜ ํ’€์ด๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.

๋จผ์ € ์œ„์™€ ๊ฐ™์ด DP๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

 

๋จผ์ € 1๋ฒˆ ์งธ ํ–‰์„ ์ฑ„์›Œ๋ณด๋ฉด

  • AC์™€ C๊ฐ€ ๋งŒ๋‚˜์„œ LCS๋Š” 1์ด๋‹ค.

๋‘๋ฒˆ ์งธ ํ–‰์„ ๋ณด์ž.

  • A์™€ CA๊ฐ€ ๋งŒ๋‚˜์„œ LCS๋Š” 1์ด๋‹ค.
  • ACA์™€ CA๊ฐ€ ๋งŒ๋‚˜์„œ LCS๋Š” 2์ด๋‹ค.

 

์„ธ๋ฒˆ ์งธ ํ–‰์„ ๋ณด์ž.

  • A์™€ CAP = 1
  • ACA์™€ CAP = 2
  • ACAYKP์™€ CAP = 3

์—ฌ๊ธฐ์„œ ๋‘๊ฐ€์ง€ ๊ทœ์น™์„ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

  • ๋ฌธ์ž๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ: ์ด์ „ ๋ฌธ์ž๊นŒ์ง€์˜ LCS + 1
    EX) ACAYKP์™€ CAP๋ฅผ ๋ดค์„ ๋•Œ P๊ฐ€ ๊ฐ™์€ ๋ฌธ์ž์ด๋‹ค.
    ๊ทธ๋ ‡๋‹ค๋ฉด ACAYK ์™€ CA ์˜ LCS ๋Š” 2์ด๊ณ  +1์„ ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด
    ACAYKP์™€ CAP ์˜ LCS ๋Š” 3์ด ๋œ๋‹ค.
  • ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ: ๋‘ ๋‹จ์–ด์—์„œ ๊ฐ๊ฐ์˜ ์ด์ „๋‹จ๊ณ„์˜ LCS ์ค‘ ํฐ ๊ฐ’
    EX) ACA์™€ CAP ์—์„œ A ์™€ P๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ์ด์ „์˜ ๊ฐ’ LCS
    1. AC์™€ CAP = 1
    2. ACA์™€ CA = 2
    ์ด ๋‘˜ ์ค‘ max๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

์ด๋ ‡๊ฒŒ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๊ฐ€๊ฒŒ ๋œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. dp์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ’จ !์‹ฌํ™” ํ•™์Šต : ์ด์ œ LCS์˜ ๊ตฌ์„ฑ ๋ฌธ์ž๋ฅผ ๊ตฌํ•ด๋ณด์ž.

DP์˜ ๊ฐ€์žฅ ์•„๋ž˜์—์„œ ๋ถ€ํ„ฐ ๊ฐ ํ–‰์˜ ๊ฐ€์žฅ ํฐ๊ฐ’์ค‘ ์•ž์ชฝ์— ์žˆ๋Š” ๊ฐ’์„ ์„ ํƒํ•ด์ค€๋‹ค. 
( ํ•˜์ง€๋งŒ ๊ฐ ํ–‰๊ณผ ์—ด์€ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์šฐ๋ฆฌ๋Š” ACAK๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

def solution(a, b):
    a = ' ' + a
    b = ' ' + b
    an = len(a)
    bn = len(b)

    dp = [[0]*an for _ in range(bn)]
    for i in range(1, bn):
        for j in range(1, an):
            if b[i] == a[j]:
                dp[i][j] = dp[i-1][j-1] + 1

            else:
                dp[i][j] = max(dp[i-1][j], dp[i][j-1])

        for row in dp:
            print(row)
        print()
    print(dp[-1][-1])
    return


if __name__ == "__main__":
    a0 = input()
    b0 = input()
    solution(a0, b0)

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/9251

 

9251๋ฒˆ: LCS

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

www.acmicpc.net


๋ฌธ์ œ

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

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

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Algorithm Problem > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[python] ๋ฐฑ์ค€ - 1916. ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ  (0) 2020.09.23
[python] ๋ฐฑ์ค€ - 2225. ํ•ฉ๋ถ„ํ•ด  (0) 2020.09.22
[python] ๋ฐฑ์ค€ - 11497. ํ†ต๋‚˜๋ฌด  (0) 2020.09.21
[python] ๋ฐฑ์ค€ - 2410. 2์˜ ๋ฉฑ์ˆ˜์˜ ํ•ฉ  (0) 2020.09.21
[python] ๋ฐฑ์ค€ - 4883. ์‚ผ๊ฐ ๊ทธ๋ž˜ํ”„  (0) 2020.09.20
    'Algorithm Problem/Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [python] ๋ฐฑ์ค€ - 1916. ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ
    • [python] ๋ฐฑ์ค€ - 2225. ํ•ฉ๋ถ„ํ•ด
    • [python] ๋ฐฑ์ค€ - 11497. ํ†ต๋‚˜๋ฌด
    • [python] ๋ฐฑ์ค€ - 2410. 2์˜ ๋ฉฑ์ˆ˜์˜ ํ•ฉ
    deo2kim
    deo2kim
    ์ฝ”๋”ฉ ๊ธฐ๋กํ•˜๊ธฐ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”