https://www.acmicpc.net/problem/1543
처음엔 그냥 for문 써서 모든 경우를 찾았다.
그런데 더 쉬운 풀이방법과, 정규표현식을 이용한 방법도 깨달아서 업로드 해본다.
1번째 소스코드
import sys
input = sys.stdin.readline
# ===== 1차 풀이 ===== 108ms
T = input()
text = input().rstrip()
leng = len(text)
idx = 0
answer = 0
while idx < len(T)-leng:
if T[idx:idx+leng] == text:
idx += leng
answer += 1
else:
idx += 1
print(answer)
2번째 소스코드
문자열에 count 하면 중복되지 않게 찾아준다는 점이 놀라웠다.
import sys
input = sys.stdin.readline
# ===== 2차 풀이 ===== 116ms
T = input().rstrip()
text = input().rstrip()
print(T.count(text))
3번째 소스코드
import re
import sys
input = sys.stdin.readline
# ===== 3차 풀이 ===== 196ms
T = input().rstrip()
text = input().rstrip()
regex = re.compile(text)
cnt = 0
while True:
m = regex.search(T)
if not m:
break
cnt += 1
T = T[m.end():]
print(cnt)
정규표현식이 제일 느렸다.
꼭 정규표현식을 써야할 일이 아니면 그냥 for문 때리거나 내장함수 count 쓰는게 나은 것 같다.
'알고리즘' 카테고리의 다른 글
백준 5430 AC - 골드5 [파이썬] (0) | 2022.11.07 |
---|---|
프로그래머스 [1차]캐시 - level2 [파이썬] (0) | 2022.11.04 |
백준 1613 역사 - 골드3 [파이썬] (0) | 2022.10.11 |
백준 11404 플로이드 - 골드4 [파이썬] (0) | 2022.10.10 |
백준 4485 녹색 옷 입은 애가 젤다지? - 골드4 [파이썬] (0) | 2022.10.09 |