본문 바로가기
Algorithms/백준

[백준_1013]Contact with Python

by jeomn 2021. 6. 24.

백준(BOJ) 문자열 문제집: Contact(골드 5)

문제 출처: https://www.acmicpc.net/problem/1013

 

1013번: Contact

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 전파를 표현하는, { 0, 1 }만으로 이루어진 문자열이 공백 없이 주어진다. 문자열 길이는 (1 ≤

www.acmicpc.net

 

1. 알고리즘

정규 표현식 문제....처음에는 이걸 구현을 하려면 엄청 복잡할 것같은데 어떻게 해야 하지...?라고 생각했지만, 문자열 규칙이 있다는 점과 그 규칙이 정규식처럼 보였기 때문에 이거 그냥 정규식으로 풀어도 되나? 해서 풀었더니 풀리더라. 문제로 주어지는 패턴이 정규식과 동일해서 오히려 정규식 맞나..? 싶었던 문제.

  • 입력으로 주어지는 문자열에 대해 정규표현식 패턴과 일치하는 지 확인
  • 일치하면 'YES' 출력, 불일치하면 'NO'출력

 

2. 유의 사항

 

3. 어려웠던 점, 해결 방법

  • 처음에 match 함수를 사용했는데, 예제만 맞고 제출 시 틀렸음
    • #틀린 코드
      regex = re.compile('(100+1+|01)+')
      is_match = regex.match(input_string)​
       
    • match 함수와 fullmatch 함수 차이를 알고 사용해야 함.
      • match(): 문자열 처음부터 패턴에 일치하는 부분이 있는 지 확인.
      • fullmatch(): 문자열 전체가 패턴과 일치하는 지 확인.

 

4. 소스 코드

상세 코드 설명은 주석

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys
import re
 
 
input_func = sys.stdin.readline
if __name__ == '__main__':
    T = int(*map(int, input_func().split()))
    
    #테스트케이스만큼 반복
    for _ in range(T):
        input_string = str(*map(str, input_func().split()))
        
        #정규표현식 컴파일, 패턴 생성
        regex = re.compile('(100+1+|01)+')
        #문자열 전체가 패턴과 일치하는 지 확인
        is_match = regex.fullmatch(input_string)    #패턴과 일치하면 match객체 반환, 불일치 시 None 객체 반환
        
        
        #패턴과 일치하면 YES 출력
        if is_match:
            print('YES')
        #패턴과 일치하지 않으면 NO 출력
        else:
            print('NO')
cs

5. 고민

  • 정규 표현식 예전에 공부한 적 있는데 공부할 때는 '아...! 딱보면 알겠네' 싶은데 왜 직접 짤 때에는 너무 어려운 건지 모르겠다....공부해야지.........

댓글