alpyrithm_알파이리즘

[알고리즘][Python] 백준(BOJ) 1543 문서 검색_파이썬 본문

Algorithm/백준 알고리즘_Python

[알고리즘][Python] 백준(BOJ) 1543 문서 검색_파이썬

알파이 2020. 9. 16. 08:02

 

1543 문서 검색    https://www.acmicpc.net/problem/1543

 

1543번: 문서 검색

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

www.acmicpc.net

 

 

 

 

 

 

문제 풀기 전 공부할 것 : 문자열, 브루트포스 알고리즘

 

 

 

 

 

 

 

풀이 1

<내용>

  • doc와 word에 각각 입력을 받는다.
  • res를 0으로 초기화하고 for문으로 doc 첫 단어부터 반복한다.
  • 만약에 word가 doc에 들어있으면 cnt에 1을 더하고 idx를 현재 인덱스 + 단어 길이로 하여 반복문에서 그 다음 인덱스로 넘어갈 수 있도록 한다.

 

 

<코드>

doc = input()
word = input()
res = 0
for i in range(len(doc)):
    cnt = 0
    idx = -1
    for j in range(i, len(doc)):
        if j < idx:
            continue
        if doc[j:j+len(word)] == word:
            cnt += 1
            idx = j + len(word)
    res = max(res, cnt)
print(res)

 

+) 너무 어렵게 생각한 것 같다. 저렇게 이중 for문을 돌지 않아도 모든 경우를 다 확인할 수 있다.

 

 

 

 

 

 

 

 

풀이 2

<내용>

  • doc와 word에 각각 입력을 받는다.
  • 문자열의 find는 문자나 문자열이 처음으로 나온 위치를 알려주는 함수로 문자나 문자열이 존재하지 않으면 -1을 반환한다.
  • while문을 word가 나오지 않을 때까지 반복한다.
  • word가 존재하면 res에 1을 더하고 doc을 재설정한다.

 

 

<코드>

doc = input()
word = input()
res = 0

while True:
    idx = doc.find(word)
    if idx == -1:
        break
    
    res += 1
    doc = doc[idx+len(word):]
    
print(res)

 

 

 

 

 

 

 

 

풀이 3

<내용>

  • doc와 word에 각각 입력을 받는다.
  • 단어가 등장하는 수인 res와 인덱스인 idx를 0으로 초기화한다.
  • while문으로 반복을 진행하는데 doc의 길이에서 idx를 뺀 값이 word의 길이보다 크거나 같을 때만 한다.
  • doc의 현재 idx에서 단어의 길이만큼 더한 idx까지의 단어가 word와 같으면 res에 1을 더하고 idx에 단어의 길이만큼 더한다.
  • 같지 않다면 idx에 1을 더해 진행한다.

 

 

<코드>

doc = input()
word = input()
res = 0
idx = 0

while len(doc) - idx >= len(word):
    if doc[idx:idx+len(word)] == word:
        res += 1
        idx += len(word)
    else:
        idx += 1
        
print(res)

 

 

 

 

 

 

 

 

풀이 4

<내용>

  • doc와 word에 각각 입력을 받는다.
  • count는 문자열 중 문자의 개수를 세는 함수로 이를 이용해서 word가 등장하는 수를 찾을 수 있다.

 

 

<코드>

doc = input()
word = input()
print(doc.count(word))

 

 

 

 

 

 

 

 

 

풀이 5

<내용>

  • doc와 word에 각각 입력을 받는다.
  • doc를 word를 기준으로 split하면 word 기준으로 분리된 값들의 리스트가 나오기 때문에 1을 빼야 word의 수를 출력할 수 있다.
    • 예를 들어, word 기준으로 분리된 값들이 3개라면 word가 2개 있기 때문에 3개의 부분으로 나뉘는 것이다.

 

<코드>

doc = input()
word = input()
print(len(doc.split(word))-1)

 

 

 

 

 

 

 

 

반응형
Comments