문자를 받아, 매치가 되는 문자를 출력하는 문제이다.
문제를 보고, 문자를 ?와 *로 잘라서 처리해야하나 고민해서, 자르고 위치를 어떻게 해야할지 찾아보다가
여기에서 정규 표현식이라는 것을 발견했다. 읽어보니 문자열 매칭을 빠르고 짧게 처리할 수 있는 방법이 나와있어서,
그것을 이용해 코드를 짜보았다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# wildcard
import re
case = int(input())
for i in range(case):
instr = input() # 와일드카드 문자열 입력
newin = instr.replace('*', '.*').replace('?', '.') # 와일드카드 문자열을 정규 표현식 형태로
filename = []
filenum = int(input()) # 파일의 수
for k in range(filenum):
filename.append(input()) # 파일이름 입력
p = re.compile(newin) # 정규표현식
result = []
for o in filename: # 파일마다 검사
if p.match(o): # 파일이 와일드카드에 포함이 되고
if p.match(o).group() == o: # 포함된 것이 원래 파일과 같다면 (포함된 것이 다르면 답에 넣지 말아야 함)
result.append(o) # 답에 넣고
result.sort() # 정렬하고
for j in result: # 출력
print(j)
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
문자열을 정규표현식 형태로 바꾸고, 그 형식대로 match를 하여 결과물을 내는 코드이다.
느낀점:
1. 코드 길이도 짧고, 수행시간도 짧게 코드를 작성하게 되어서 기쁘다. 앞으로 문자열을 비교하는 문제가 나오면 정규표현식을 이용해 보도록 노력하는게 좋을거같다.
2. 정규표현식 자체가 뭔지도 알아보는것이 도움이 될거같다.
'코테용 문제풀이 > 알고스팟' 카테고리의 다른 글
알고스팟 승률올리기 (RATIO) 문제 파이썬으로 풀기 (0) | 2020.01.07 |
---|---|
알고스팟 원주율 외우기 (PI) 문제 파이썬으로 풀기 (0) | 2020.01.05 |
알고스팟 드래곤 커브 (dragon) 문제 파이썬으로 풀기 (0) | 2020.01.04 |
알고스팟 쿼드 트리 뒤집기 (quadtree) 문제 파이썬으로 풀기 (0) | 2019.12.17 |
알고스팟 PPAP (PPAP) 문제 파이썬으로 풀기 (0) | 2019.12.05 |