1. 문제 출처
https://www.acmicpc.net/problem/9996
2. 풀이
2가지 방법이 존재한다.
1. 정규 표현식 미사용
# 테스트 케이스 개수 받기
N = int(input())
# 패턴 받은 후 *을 기준으로 자른다.
pattern = input().split("*")
# 패턴의 길이 구하기
pattern_len = len(pattern[0])+len(pattern[1])
def check():
# 결과 리스트 초기화
result_list = ["NE" for i in range(N)]
# 테스트 케이스 수만큼 반복
for idx in range(N):
input_str = input()
# 만약 문자열이 pattern[0]으로 시작, pattern[1]로 끝나고 문자열의 길이가 패턴의 총길이 보다 크거나 같으면
if input_str.startswith(pattern[0]) & input_str.endswith(pattern[1]) & (len(input_str) >= pattern_len):
# 결과를 "DA"로 바꾼다
result_list[idx] = "DA"
"결과 출력"
for idx in range(N):
print(result_list[idx])
check()
2. 정규 표현식 사용
import re
#위와 동일
N = int(input())
def check_regex():
result_list = ["NE" for i in range(N)]
query = input().split("*")
# 정구 표현식으로 query[0]와 query[1] 사이의 a부터 z까지의 임의의 문자가 한개 이상 존재한다
# 라는 뜻이다.
query = query[0]+ "[a-z]*"+query[1]
for idx in range(N):
input_str = input()
# fullmatch를 사용하여 전체 문자열이 해당 패턴을 만족하는지 구한다.
if re.fullmatch(query ,input_str):
# 만족하면 결과를 "DA"로 바꾼다.
result_list[idx] = "DA"
for idx in range(N):
print(result_list[idx])
check_regex()
쉽다고 생각했다가, ab*bd를 받았을 때 abd를 만족하는 오류를 범하였다. 이 오류를 해결하기 위해 패턴으로 받은 문자열의 개수보다 짧은 문자열 일 때는 "NE"가 되도록 하였다.
그리고 위의 그림과 같이 re를 import 하여 사용한 것이 메모리와 속도에서 안 사용한 것에 밀렸다.
다음 부터는 라이브러리를 가져다 쓰기 전에 없이도 가능한지 생각해 보고 사용해야겠다.
'알고리즘' 카테고리의 다른 글
1439-백준-뒤집기 (0) | 2023.02.13 |
---|---|
2618- 백준 - 경찰차 (0) | 2023.02.10 |
1254-백준-팰린드롬 만들기 (0) | 2023.02.09 |
9536-백준-여우는 어떻게 울지? (0) | 2023.02.06 |
백준-1141-접두사 (0) | 2023.02.04 |