0Pricing
Competitive Programming Academy · 강의

패턴 검색을 위한 Z 함수

문자열 전체에서 접두사를 비교합니다

패턴 검색을 위한 Z 함수은(는) CoddyKit의 무료 Competitive Programming Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Competitive Programming Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

또 다른 매칭 도구

Z 함수는 패턴 검색에서 KMP를 대신할 수 있는 간결한 방법입니다. 많은 사람이 Z 함수를 더 쉽게 이해하고 구현합니다. ✨

z[i]의 의미

각 인덱스에서 z[i]는 i에서 시작하여 전체 문자열의 접두사와 일치하는 가장 긴 부분 문자열의 길이입니다.

간단한 예시

aabaab에서 z의 값은 0,1,0,3,1,0입니다. 인덱스 3에서는 aab 구간이 접두사와 일치하므로 길이가 3이 됩니다.

Z 박스

지금까지 찾은 가장 오른쪽의 일치 구간인 [l, r] 창을 추적합니다. 이를 이용하면 이전 비교 결과를 재사용할 수 있습니다.

l, r = 0, 0

박스 안에서

i가 박스 안에 있을 때는 알려진 z 값을 복사하여 시작점으로 사용하고, 그 값이 박스의 오른쪽 경계를 넘지 않도록 제한합니다.

if i < r:
    z[i] = min(r - i, z[i - l])

박스 너머로 확장하기

시작점 이후에는 접두사와 일치하는 동안 문자를 하나씩 계속 비교합니다.

while i + z[i] < n and s[z[i]] == s[i + z[i]]:
    z[i] += 1

박스를 앞으로 이동하기

일치 구간이 더 오른쪽까지 이어지면 l과 r을 갱신하여 이후 인덱스가 그 구간을 재사용할 수 있게 합니다.

if i + z[i] > r:
    l, r = i, i + z[i]

선형 시간 보장

박스는 오른쪽으로만 이동하므로 전체 작업량은 O(n)입니다. 각 문자가 기여하는 양에는 상한이 있습니다.

Z를 이용한 검색

pattern + sep + text를 이어 붙인 뒤 Z를 실행합니다. 패턴 길이와 같은 z 값이 있으면 일치가 발생한 것입니다.

combined = pattern + chr(0) + text
z = z_function(combined)

일치 위치 읽기

Z 배열을 훑으면서 z[i] == len(pattern)인 위치를 찾으면, 텍스트에서 해당 일치가 시작되는 위치를 알 수 있습니다.

if z[i] == len(pattern):
    matches.append(i - len(pattern) - 1)

Z와 KMP 비교

Z와 KMP는 모두 선형 시간에 실행됩니다. Z는 코드를 작성하기 더 간단한 경우가 많으므로, 훌륭한 대체 도구가 됩니다.

빠른 확인

Z 배열의 의미를 확실히 이해했는지 확인하세요.

복습: Z 함수의 장점

이제 이동하는 박스를 이용해 Z 배열을 만들고, 선형 시간에 검색하며, KMP를 대신할 간결한 방법을 갖추었습니다. 🎯

자주 묻는 질문

“패턴 검색을 위한 Z 함수” 강의는 무료인가요?

네 — “패턴 검색을 위한 Z 함수” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Competitive Programming Academy 강의 전체를 잠금 해제할 수 있습니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“패턴 검색을 위한 Z 함수”에서 뭘 배우나요?

문자열 전체에서 접두사를 비교합니다 브라우저에서 직접 실행하는 실습 코드로 Competitive Programming Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Competitive Programming Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Competitive Programming Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“패턴 검색을 위한 Z 함수” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Competitive Programming Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Competitive Programming Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. KMP 접두사 함수
  2. 다항식 문자열 해싱
  3. 패턴 검색을 위한 Z 함수
  4. 접두사 조회를 위한 트라이
← Competitive Programming Academy(으)로 돌아가기