반응형
문제
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다.
세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다.
출력
첫째 줄에 중복되지 않게 최대 몇 번 등장하는지 출력한다.
예제 입력 1ababababa
aba |
예제 출력 12
|
예제 입력 2a a a a a
a a |
예제 출력 22
|
예제 입력 3ababababa
ababa |
예제 출력 31
|
예제 입력 4aaaaaaa
aa |
예제 출력 43
|
풀이
나중에 입력받은 패턴이 먼저 입력받은 문자열에 몇 개 존재하는지 세는 문제이다.
단, 세는 패턴의 부분이 서로 겹치면 안 된다.
처음엔 스택을 사용할까 하다가, 그냥 for문을 변형하여 앞에서부터 세되, 패턴이 등장하면 그 길이만큼 넘기는 방식을 사용했다.
import sys
input = sys.stdin.readline
s = input().rstrip()
p = input().rstrip()
ans,i = 0,0
while i < len(s)-len(p)+1:
if s[i:i+len(p)] == p:
ans += 1
i+=len(p)
continue
i+=1
print(ans)
반응형
'알고리즘 연습 > 구현, 문자열' 카테고리의 다른 글
[🥉2 / 백준 1076 / 파이썬] 저항 (0) | 2021.12.31 |
---|---|
[🥇4 / 백준 14499 / 파이썬] 주사위 굴리기 (0) | 2021.12.29 |
[🥉2 / 백준 10995 / 파이썬] 별 찍기 - 20 (0) | 2021.12.22 |
[🥈4 / 백준 11652 / 파이썬] 카드 (0) | 2021.12.17 |
[🥉2 / 백준 1159 / 파이썬] 농구 경기 (0) | 2021.12.15 |