https://www.acmicpc.net/problem/9996
코드 (정규표현식)
import re
n = int(input())
pattern = re.compile("^"+input().replace("*", "[a-z]*")+"$")
for _ in range(n):
string = input()
if pattern.match(string):
print("DA")
else:
print("NE")
입력된 패턴을 정규표현식으로 바꾸고, 이를 이용해서 매치되는 문자열은 "DA"(YES), 매치되지 않는 문자열은 "NE"(NO)를 출력한다.
예를 들어, `h*d`가 입력된다고 했을 때, 정규표현식으로 바꾸면 다음과 같다.
`^h[a-z]*d$`
- `^`: 패턴의 처음을 의미
- `[a-z]: a부터 z까지 알파벳 소문자
- `*`: 0번 이상 반복됨
- `$`: 패턴의 끝을 의미
코드(단순 구현)
n = int(input())
pattern = input()
left, right = pattern.split("*")
for _ in range(n):
string = input()
if len(left)+len(right) > len(string):
print("NE")
elif string[0:len(left)] == left and string[len(string)-len(right):] == right:
print("DA")
else:
print("NE")
패턴 문자열의 처음과 끝은 무조건 알파벳이고, `*`도 단 한 번만 나온다고 했으므로 위와 같이 풀 수도 있다. 이렇게 풀 때는 다음과 같은 케이스를 조심해야 한다.
1
aaa*a
aaa
답: NE
이런 경우 첫번째 if문을 고려해주지 않는다면 답이 틀리게 된다. 나도 처음에는 틀려서 의아해하다가 질문게시판의 글을 보고 해결할 수 있었다.
'문제풀이 > 문자열' 카테고리의 다른 글
[Python/파이썬] 백준 2941번 크로아티아 알파벳 (0) | 2025.01.13 |
---|---|
[Javascript/자바스크립트] 백준 5648번 역원소 정렬 (0) | 2024.07.27 |
[Javascript/자바스크립트] 백준 1942번 디지털시계 (0) | 2024.07.09 |
[Javascript/자바스크립트] 구름 - 단어의 개수 세기 (0) | 2024.07.01 |
[Python/파이썬] 백준 14405번 피카츄 (0) | 2024.06.24 |