본문 바로가기

IT/알고리즘 코딩

코딩테스트에서 re 모듈(정규표현식)은 꼭 써야 할까?

 

코딩테스트를 준비하다 보면 문자열을 처리하는 문제를 자주 접하게 됩니다. replace(), split(), find() 같은 기본 문자열 함수들만으로도 웬만한 문제는 풀 수 있는데, 굳이 복잡한 정규표현식(re 모듈)을 배워야 할까요?

 

이 글에서는 언제 re가 꼭 필요한지, 기본 메서드로는 부족한 경우는 무엇인지, 그리고 현실적인 준비 전략까지 정리해 드립니다.

 


1. 문자열 기본기: replace, split, in만으로도 가능한 문제들

다음은 정규표현식을 쓰지 않아도 충분히 풀 수 있는 문자열 문제 유형입니다.

 
# 단순 치환
s = "apple banana"
s = s.replace("banana", "orange")  # "apple orange"

# 특정 단어 포함 여부
"apple" in s  # True

# 구분자 기준 나누기
s = "apple,banana,grape"
s.split(",")  # ['apple', 'banana', 'grape']
 
 

이런 유형은 대부분의 코테 초급 문제에서 많이 등장하고, Python 기본 함수만으로 충분히 해결됩니다.


2. 그런데... 이럴 땐 re가 있어야 쉽다

문자열을 다루다 보면 한 번에 여러 조건을 만족하는 복잡한 전처리가 필요할 때가 있습니다.

 

그럴 때는 re의 강력한 패턴 매칭이 빛을 발합니다.

 

예를 들어:

숫자만 추출

import re s = "abc123def456"

numbers = re.findall(r'\d+', s) # ['123', '456']
 

공백과 특수문자 제거

s = "hello! how are you?"

clean = re.sub(r'[^\w\s]', '', s) # 'hello how are you'
 

이메일만 추출

text = "문의: test@example.com, 또는 help@domain.co.kr"

emails = re.findall(r'[\w\.-]+@[\w\.-]+', text)

# ['test@example.com', 'help@domain.co.kr']
 
 
 

이런 작업을 replace()로 하나하나 하려면 너무 번거롭고 코드도 지저분해집니다.


 

3. 그럼 코테에선 re을 꼭 알아야 하나?

 

모든 문제에 필요한 건 아님

  • 80% 이상의 문자열 문제는 기본 메서드로 해결 가능

그러나 몇몇 실전 문제는 re가 없으면 비효율적

  • 로그 분석, 자연어 처리, 이메일/전화번호 추출, 형식 정규화 등

중요 포인트:

re는 코테에서 필수는 아니지만, 알아두면 점수도, 시간도 아낄 수 있는 강력한 무기입니다.


4. 최소한 알아야 할 re 패턴 5가지


 

패턴 설명 예시
\d 숫자 하나 '123abc' → '1', '2', '3'
\d+ 숫자 여러 개 'abc123def' → '123'
\w 문자+숫자 'hello!' → 'h', 'e'...
[^\w\s] 특수기호만 'hi!' → '!'
re.sub(pattern, repl, text) 치환 'hi!@#' → 'hi'
 

이 정도만 알아도 웬만한 정규표현식 문제는 손쉽게 처리할 수 있습니다.


5. 실전 팁: re를 쓸 수 있다면, 시간 절약 가능

정규표현식이 꼭 필요하지 않더라도, 짧고 명확한 코드로 빠르게 구현하는 데 유리합니다. 코딩테스트에서 시간이 촉박할수록, 정규표현식은 큰 장점이 됩니다.


 

결론: 정규표현식은 ‘선택이지만 실전에서는 강력한 무기’

  • 초급 코테 준비자: replace, split, in으로 시작
  • 중상급 이상 또는 실전 대비자: re 학습 추천
  • 자주 쓰이는 패턴 5개만 익혀도 체감되는 실력 향상

연습 문제 추천 (Python 기준)

 

 

 

regex101: build, test, and debug regex

Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java, C#/.NET, Rust.

regex101.com