문제: 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는 리스트만 가능할 줄 알았는데 문자열도 가능한 것을 다시 배웠습니다.
'ProblemSolving > String' 카테고리의 다른 글
백준 5052 전화번호 목록 (파이썬) (0) | 2022.06.06 |
---|---|
백준 1439 뒤집기 (파이썬) (0) | 2022.06.06 |
백준 5430 AC (파이썬) (0) | 2022.05.30 |
프로그래머스 Level 2 튜플 (파이썬) (0) | 2022.05.29 |
프로그래머스 Level 2 메뉴 리뉴얼 (파이썬) (0) | 2022.05.26 |