매일 매일 성장하는 섭섭군

[Seop's의 코드풀이] 백준 1543 문서 검색 - Python 본문

알고리즘 문제풀이/백준

[Seop's의 코드풀이] 백준 1543 문서 검색 - Python

섭섭군 2020. 4. 30. 16:33
반응형

이번에 풀어볼 문제는 백준 1543번 문서 검색 문제 입니다.

문제는 다음과 같습니다.

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

 

1543번: 문서 검색

세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한�

www.acmicpc.net

 

문제를 요약하자면 다음과 같습니다.

 

입력 : 문자열 s 와 찾고자 하는 문자열 p가 주어진다.

출력 : s 안에서 p가 중복되지 않게 몇번 등장하는지를 출력한다.

 

문자열 s의 0번재에서 검색을 시작 할수도 있고 2, 3 번재에서부터 검색을 시작 할수도 있다고 합니다.

문자열 s의 최대 길이가 2500이니 2499번 검색을 시작해야 할 수 도 있지만 매우 비효율적 입니다.

조금만 더 생각해보면 검색하는 문자열 p의 길이 만큼만 이동해서 검색하면 됩니다.

최대 길이가 50이니 가장 길다고 해도 50번만 검색을 진행하면 됩니다.

 

이러한 기준을 가지고 문제를 푼 코드는 다음과 같습니다.

import sys
input = sys.stdin.readline

s = input().rstrip()
p = input().rstrip()
p_len = len(p)

#  검색해서 나온 중복값을 담는다.
ans_list = []

#  찾고자 하는 문자열의 길이만큼만 이동해서 반복한다.
for j in range(p_len) :
    answer = 0
    i = j
    while i < len(s) :
        #  i + p_len 이 문자열 s 보다 길다면 마지막에 왔다는 의미이다. -> Else로
        if i + p_len < len(s) :
            if p == s[i : i + p_len] :
                answer += 1
                i += p_len
            else :
                i += 1
        else :
            if p == s[i :] :
                answer += 1
            break
        
    ans_list.append(answer)
print(max(ans_list))

 

하지만...... 이렇게 python의 내장함수를 이용해 이렇게 풀 수도 있습니다.

그냥 count 하면 됩니다.

 

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

 

내장 함수를 잘 사용하면 이렇게 편리힙니다. ㅜㅜㅜ

 

코드에 대한 문의나 피드백은 언제나 감사드립니다.

 

감사합니다.

 

반응형
Comments