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] ๋ฐฑ์ค€ - 16916. ๋ถ€๋ถ„ ๋ฌธ์ž์—ด
Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 16916. ๋ถ€๋ถ„ ๋ฌธ์ž์—ด

2020. 11. 3. 08:44
๋ฐ˜์‘ํ˜•

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

  • G4 | ๋ฌธ์ž์—ด, KMP

๋”ฑ ๋ด๋„ ๋„ˆ๋ฌด ์‰ฝ์ง€๋งŒ G5๋‹ˆ๊นŒ…. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๋“ค์–ด๋Š” ๋ดค์–ด๋„ ํ•œ ๋ฒˆ๋„ ์จ๋ณธ ์  ์—†๋Š” KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์จ์•ผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

KMP๋ฅผ ์“ฐ๋ฉด ๋ธŒ๋ฃจํŠธํฌ์Šค๋กœ ๋ฌธ์ž์—ด ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์•„์ฃผ ๋น ๋ฅด๋‹ค. O(M+N)
ํ•œ ์‹œ๊ฐ„ ๋„˜๊ฒŒ ์ฐพ์•„๊ฐ€๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ์ง€๋งŒ ์„ค๋ช…ํ•˜๊ธฐ๋Š” ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค. ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ ๋œ๋‹ค. ๋‚˜์ค‘์— ํ•œ ๋ฒˆ ๋” ๋ด์•ผ๊ฒ ๋‹ค.

๋Œ€์ถฉ ๋งํ•ด๋ณด์ž๋ฉด
๋น„์Šทํ•œ ํŒจํ„ด์„ ๊ธฐ์–ตํ•ด๋’€๋‹ค๊ฐ€ ํŒจํ„ด์„ ๋งŒ๋‚˜๋ฉด ์ ํ”„... (๋ฌด์Šจ ๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค)
์–ด์งธ ๋๋“  ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋งŽ์ด ์“ฐ์ด์ง„ ์•Š์ง€๋งŒ, ์ ๋‹นํžˆ ์•Œ์•„๋งŒ ๋‘๋ฉด ์ข‹์„ ๊ฑฐ ๊ฐ™๋‹ค.

 

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

def kmp_match(txt: str, pat: str) -> int:
    # ์Šคํ‚ตํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ
    def make_skip_table(skip: list):
        pt = 1  # txt๋ฅผ ๋”ฐ๋ผ๊ฐ€๋Š” ์ธ๋ฑ์Šค
        pp = 0  # pat๋ฅผ ๋”ฐ๋ผ๊ฐ€๋Š” ์ธ๋ฑ์Šค
        while pt < len(pat):
            if pat[pt] == pat[pp]:
                pt += 1
                pp += 1
                skip[pt] = pp
            elif pp == 0:
                pt += 1
                skip[pt] = pp
            else:
                pp = skip[pp]

    # ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ฐพ๊ธฐ (์ด ๋ฌธ์ œ์—์„œ๋Š” ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋งŒ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.)
    def find_match_idx(txt: str, pat: str) -> int:
        pt = 0
        pp = 0
        while pt < len(txt) and pp < len(pat):
            if txt[pt] == pat[pp]:
                pt += 1
                pp += 1
            elif pp == 0:  # ๋” ์ด์ƒ ์•ž์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
                pt += 1
            else:
                pp = skip[pp]
        if pp == len(pat):
            return 1
        else:
            return 0

    skip = [0] * (len(pat) + 1)
    make_skip_table(skip)
    answer = find_match_idx(txt, pat)
    print(answer)


if __name__ == '__main__':
    S = input()
    P = input()
    kmp_match(S, P)
 

 

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

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

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

 

16916๋ฒˆ: ๋ถ€๋ถ„ ๋ฌธ์ž์—ด

์ฒซ์งธ ์ค„์— ๋ฌธ์ž์—ด S, ๋‘˜์งธ ์ค„์— ๋ฌธ์ž์—ด P๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฌธ์ž์—ด์€ ๋นˆ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉฐ, ๊ธธ์ด๋Š” 100๋งŒ์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ๋˜, ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

www.acmicpc.net

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

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

[python] ๋ฐฑ์ค€ - 1655. ๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”  (0) 2020.11.05
[python] ๋ฐฑ์ค€ - 1747. ์†Œ์ˆ˜&ํŒฐ๋ฆฐ๋“œ๋กฌ  (0) 2020.11.04
[python] SWEA - 10912. ์™ธ๋กœ์šด ๋ฌธ์ž  (0) 2020.11.02
[python] SWEA - 10804. ๋ฌธ์ž์—ด์˜ ๊ฑฐ์šธ์ƒ  (0) 2020.11.01
[python] ๋ฐฑ์ค€ - 1012. ์œ ๊ธฐ๋† ๋ฐฐ์ถ”  (0) 2020.10.31
    'Algorithm Problem/Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [python] ๋ฐฑ์ค€ - 1655. ๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”
    • [python] ๋ฐฑ์ค€ - 1747. ์†Œ์ˆ˜&ํŒฐ๋ฆฐ๋“œ๋กฌ
    • [python] SWEA - 10912. ์™ธ๋กœ์šด ๋ฌธ์ž
    • [python] SWEA - 10804. ๋ฌธ์ž์—ด์˜ ๊ฑฐ์šธ์ƒ
    deo2kim
    deo2kim
    ์ฝ”๋”ฉ ๊ธฐ๋กํ•˜๊ธฐ

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