Arian Soleimanzadeh
  • 홈
  • 블로그
  • 팟캐스트
  • 비디오
  • 라이브러리
  • 문의
العربيةArabic
DeutschGerman
EnglishEnglish
فارسیPersian
한국어Korean
中文Chinese
패널•빠른 문의

Languages

Choose your interface locale

ar

العربية

Arabic

de

Deutsch

German

en

English

English

fa

فارسی

Persian

ko

한국어

Korean

zh

中文

Chinese

상담 예약

짧은 메시지를 남겨주세요 — 가능한 한 빠르게 답변드리겠습니다.

LinkedIn빠른 응답
홈/아티클/Regular Expression Matching이란? Dynamic Programming과 TypeScript로 Regex 이해하기
Algorithms아티클

Regular Expression Matching이란? Dynamic Programming과 TypeScript로 Regex 이해하기

문자열 전체를 .와 *가 포함된 Pattern과 매칭하는 고전적인 Dynamic Programming 문제입니다. 상태 정의, Star 처리, TypeScript 구현과 복잡도를 설명합니다.

2026년 8월 19일7 분 읽기14 조회수
#Algorithms#Regex#Regular Expression#Dynamic Programming#String Algorithms#TypeScript

Arian Soleimanzadeh

Software Engineer & Researcher

dot과 star Pattern을 Dynamic Programming으로 매칭하는 Regex 알고리즘 시각화

Arian Soleimanzadeh

AI · 코드 · 제품

연구 + 엔지니어링
이 페이지에서
DotStarDynamic Programming일반 문자 또는 DotStarTypeScript복잡도MemoizationRegex와 Wildcard 차이Full Match실제 활용면접 핵심정리

고전적인 Regular Expression Matching 문제에서는 일반 문자와 다음 두 연산자를 가진 Pattern을 사용합니다.

Code
12
.  → 임의의 한 문자
*  → 이전 요소를 0번 이상 반복

예:

Code
12
s = "aa"
p = "a*"

결과는 true입니다.

Dot

.은 정확히 한 문자를 의미합니다.

Code
1
c.t

는 cat, cut, c9t와 Match할 수 있습니다.

Star

*는 앞 요소에 적용됩니다.

Code
1
a*

는 빈 문자열부터 여러 개의 a까지 표현할 수 있습니다.

Dynamic Programming

다음을 정의합니다.

Code
1
dp[i][j]

첫 번째 i개의 String 문자와 첫 번째 j개의 Pattern 문자가 완전히 Match하는지를 의미합니다.

Code
1
dp[0][0] = true

또한 a*b*c* 같은 Pattern은 모든 Star를 0번 사용할 수 있으므로 빈 String과도 Match합니다.

일반 문자 또는 Dot

현재 문자가 같거나 Pattern이 .이면:

Code
1
dp[i][j] = dp[i - 1][j - 1]

Star

먼저 이전 요소와 *를 사용하지 않는 경우:

Code
1
dp[i][j] = dp[i][j - 2]

이전 Pattern 요소가 현재 String 문자와 Match한다면 하나를 더 Consume할 수 있습니다.

Code
1
dp[i][j] = dp[i][j] || dp[i - 1][j]

TypeScript

TypeScript
12345678910111213141516171819202122232425262728293031323334353637
function isRegexMatch(s: string, p: string): boolean {
  const dp = Array.from(
    { length: s.length + 1 },
    () => new Array(p.length + 1).fill(false)
  );

  dp[0][0] = true;

  for (let j = 2; j <= p.length; j++) {
    if (p[j - 1] === '*') {
      dp[0][j] = dp[0][j - 2];
    }
  }

  for (let i = 1; i <= s.length; i++) {
    for (let j = 1; j <= p.length; j++) {
      if (
        p[j - 1] === '.' ||
        p[j - 1] === s[i - 1]
      ) {
        dp[i][j] = dp[i - 1][j - 1];
      } else if (p[j - 1] === '*') {
        dp[i][j] = dp[i][j - 2];

        if (
          p[j - 2] === '.' ||
          p[j - 2] === s[i - 1]
        ) {
          dp[i][j] =
            dp[i][j] || dp[i - 1][j];
        }
      }
    }
  }

  return dp[s.length][p.length];
}

복잡도

Code
12
Time Complexity: O(n × m)
Space Complexity: O(n × m)

Memoization

Recursive하게도 해결할 수 있습니다.

x*를 만나면:

Code
1
x*를 0번 사용

또는 현재 문자가 맞으면:

Code
1
문자 하나를 Consume하고 x* 유지

두 Branch가 생깁니다.

Memoization이 없으면 같은 상태를 반복 계산할 수 있습니다.

Regex와 Wildcard 차이

Regex에서는:

Code
1
* → 이전 요소 반복

Wildcard Matching에서는 보통:

Code
1
* → 임의의 문자열

이므로 의미가 다릅니다.

Full Match

이 문제에서는 Pattern이 전체 String을 Match해야 합니다.

따라서 ell은 hello 전체와 Match하지 않습니다.

실제 활용

실제 Regex는 Validation, Search, Log Filtering, Text Processing 등에 사용됩니다.

애플리케이션에서는 직접 Regex Engine을 구현하기보다 언어에서 제공하는 검증된 Engine을 사용하는 것이 일반적입니다.

면접 핵심

  • . 의미
  • * 의미
  • DP State
  • Empty String 처리
  • 0회/여러 회 반복
  • O(n × m) 복잡도

정리

Regular Expression Matching은 재귀적 Branching 문제를 Dynamic Programming으로 바꾸는 대표적인 예제입니다.

이 페이지에서
DotStarDynamic Programming일반 문자 또는 DotStarTypeScript복잡도MemoizationRegex와 Wildcard 차이Full Match실제 활용면접 핵심정리

아티클 정보

게시 정보, 읽기 시간 및 조회 데이터입니다.

게시일

2026년 8월 19일

업데이트

2026년 11월 7일

읽기 시간

7 분 읽기

조회수

14

작성자

Arian Soleimanzadeh

이전 아티클

Palindrome이란? Two Pointers와 TypeScript로 팰린드롬 검사하기

다음 아티클

Rabin–Karp 알고리즘이란? Rolling Hash로 문자열 검색하기

Arian Soleimanzadeh

현대적인 웹 엔지니어링, UI 시스템, 실용적인 AI 제품에 집중한 개인 포트폴리오 — 깨끗한 코드, 명확한 디자인.

빠른 링크

  • 소개
  • 블로그
  • 라이브러리
  • 문의

문의

  • soleimanzadeh.a.work@gmail.com
  • soleimanzadeh.uni@gmail.com

가능 시간: 평일

보통 다음 시간 내에 답변합니다 24시간.

뉴스레터

글, 프로젝트, 새 릴리스에 대한 업데이트를 받아보세요.

© 2026 ariansoleimanzadeh.dev — 모든 권리 보유.

LinkedIn