백준(BOJ) 문자열 문제집: Contact(골드 5)
문제 출처: https://www.acmicpc.net/problem/1013
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. 고민
- 정규 표현식 예전에 공부한 적 있는데 공부할 때는 '아...! 딱보면 알겠네' 싶은데 왜 직접 짤 때에는 너무 어려운 건지 모르겠다....공부해야지.........
'Algorithms > 백준' 카테고리의 다른 글
[백준_2671]잠수함식별 with Python (0) | 2021.06.30 |
---|---|
[백준_4358]생태학 with Python (0) | 2021.06.24 |
[백준_1747]소수&팰린드롬 with Python (0) | 2021.06.23 |
[백준_19640]화장실의 규칙 with Python (0) | 2021.06.16 |
[백준_20165]인내의 도미노 장인 호석 with Python (0) | 2021.06.16 |
댓글