Coding Test/BaekJoon_Python

백준 1013 <Contact> Python

JunOnJuly 2025. 2. 2. 16:27
728x90

https://www.acmicpc.net/problem/1013


정규 표현식 문제입니다.

 

파이썬 언어와는 별개로 모든 언어에서 공통적으로 채용하고 있는 '문자에 대한 공통 정규 표현식' 이 있는데, 이를 알면 굉장히 간단히 풀 수 있는 문제입니다.

 

파이썬에서 정규 표현식을 사용하기 위해서는 re 모듈을 사용합니다.

해당 문제에서 나오는 정규식을 간단히 설명하자면

 

'+' 는 해당 문자의 앞에 있는 식이 1번 이상 반복된다는 뜻입니다. 비슷한 식으로는 '*' 가 있는데 이는 앞에 있는 식이 0번 이상 반복된다는 뜻입니다.

'|' 는 앞의 식 혹은 뒤의 식 이라는 뜻으로, 둘 중 무엇이라도 올 수 있다는 뜻입니다.

'()' 는 그루핑 식으로 'abc+' 와 같이 사용하면 해당 식에서의 '+' 는 'abc', 'abcc', 'abcccc' 등 앞선 식인 'c' 만 인식 하지만 식을 묶어 통째로 인식하게 해주는 식입니다.

 

우선 re.compile 로 정규 표현식을 컴파일 해준 뒤 fullmatch 함수로 전체 문자열이 해당 표현식과 일치하는지 판별할 수 있습니다. 

 

08-1 정규 표현식 살펴보기

정규 표현식(regular expressions)은 복잡한 문자열을 처리할 때 사용하는 기법으로, 파이썬만의 고유 문법이 아니라 문자열을 처리하는 모든 곳에서 사용하는 일종의 형…

wikidocs.net

 


import sys
import re

input = sys.stdin.readline


def solution(T, strings):
    # 정규 표현식 컴파일
    p = re.compile('(100+1+|01)+')
    for string in strings:
        if p.fullmatch(string):
            print('YES')
        
        else:
            print('NO')


# 입력
T = int(input().strip())
strings = [input().strip() for _ in range(T)]

solution(T, strings)
728x90