ProblemSolving/String

백준 1543 문서검색 (파이썬)

OSNIM 2022. 6. 3. 01:00
반응형

문제: https://www.acmicpc.net/problem/1543

문제

세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다.

세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다.

출력

첫째 줄에 중복되지 않게 최대 몇 번 등장하는지 출력한다.

첫번째 제출 코드 (정답)

import re
st = input()
word = input()
p = re.compile(word)
cnt = 0
while True:
    m = p.search(st)
    if not m:
        break
    cnt += 1
    st = st[m.end():]

print(cnt)

정규 표현식을 사용하기 위한 re 모듈을 import 합니다.

그 후 두번째 입력으로 패턴을 compile 하여 p 객체에 저장하고 st에서 p와 일치하는 부분을 m에 저장합니다.

만약 search 값이 없으면 None을 반환하기 때문에 탈출시켜줍니다.

만약 있다면 st를 m객체의 뒷 부분 부터 다시 시작하여 search를 새롭게 시작합니다.

 

결과 및 정리

프로그래머스 문제를 풀다가 정규 표현식을 알면 매우 쉽게 풀 수 있는 문제가 나와서 정규 표현식만 모은 문제집 중에서 가장 먼저 시도한 문제입니다.

제가 찾은 문제집은 여기입니다 >> https://www.acmicpc.net/workbook/view/6082

 

오랫동안 코딩을 해왔지만 "정규 표현식"이라는 단어를 처음 들어서 오늘 제대로 공부하려고 합니다. 그리고 정규 표현식이라는 글도 곧바로 이해하여 뒤에 올리겠습니다.

 

효율적이고 직관적인 코드

print(input().count(input()))

단 1줄로 해결할 수 있었습니다. 

count는 리스트만 가능할 줄 알았는데 문자열도 가능한 것을 다시 배웠습니다.

반응형