<aside> 💬 lv1, 문자열 처리, 패턴 찾기

문자열 패턴 찾기

문제 설명

주어진 문자열과 패턴에 대해, 문자열에서 패턴이 몇 번 출현하는지 계산하는 코드를 작성해주세요. 문자열은 알파벳 소문자로만 구성되어 있으며, 패턴 역시 알파벳 소문자로만 구성된 비어있지 않은 문자열입니다. 문자열에서 패턴이 연속적으로 나타나는 횟수를 계산합니다.


제한 사항


입출력 예

입력 (문자열, 패턴) 출력 (패턴 출현 횟수)
("hellohellohello", "hello") 3
("ababab", "ab") 3
("abcde", "f") 0

입출력 설명

문자열 내에서 지정된 패턴이 출현하는 횟수를 계산합니다. 예를 들어, "hellohellohello" 문자열에서 "hello" 패턴은 3번 연속적으로 출현합니다.

</aside>

😺 풀이 1. while 문, 조건 검사

def solution(data): **#1 함수 정의**
    text, pattern = data **#2 데이터 분리**
    count = 0 **#3 패턴 출현 횟수 초기화**
    i = 0 **#4 인덱스 시작점 초기화**

    while i <= len(text) - len(pattern): **#5 탐색 조건 정의**
        if text[i : i + len(pattern)] == pattern: **#6 조건 검사**
            count += 1 **#7 패턴 출현 횟수 갱신**
        i += 1 **#8 인덱스 시작점 갱신**

    return count **#9 패턴 출현 횟수 반환**

단계별 풀이 전략

  1. 함수 정의

    코드의 첫 부분에서 solution이라는 함수를 정의합니다. 이 함수는 하나의 인자 data를 받습니다. data는 패턴 출현 횟수를 찾을 대상이 되는 문자열과 패턴입니다.

  2. 데이터 분리

    data의 문자열과 패턴을 text, pattern으로 언패킹합니다.

  3. 패턴 출현 횟수 초기화

    패턴 출현 횟수 count에 초깃값으로 0을 할당합니다.

  4. 인덱스 시작점 초기화

    while 문에서 패턴 pattern을 탐색하기 위해서는 문자열 text를 슬라이싱해야 합니다. 이때, 슬라이싱의 인덱스 시작점을 0부터 시작해야 슬라이딩하면서 순차적으로 pattern 탐색이 가능해집니다. 그러므로 인덱스 시작점 i의 초깃값으로 0을 할당합니다.

  5. 탐색 조건 정의

    1. while 문을 진행할 때마다 인덱스 시작점 i를 1씩 증가시키면서 문자열 탐색을 진행합니다. 이때, i를 증가시킬 수 있는 한계를 문자열 text의 길이 len(text)와 패턴 pattern의 길이 len(pattern)가 결정합니다.
    2. 여기서 i가 0일 때, 패턴의 문자열 text의 마지막 인덱스 번호와 패턴 pattern의 마지막 인덱스 번호를 비교하면 슬라이딩 가능한 횟수는 len(text) - pattern(text)임을 확인할 수 있습니다.
    3. 그러면 while 문에서 총 탐색 횟수는 1(i가 0일 때 탐색) + 슬라이딩 가능 횟수 len(text) - pattern(text)입니다.
    4. 그러므로 탐색을 위한 조건은 i <= len(text) - len(pattern)이 됩니다. 그다음 탐색 조건을 이용하여 while i <= len(text) - len(pattern):을 만들어 탐색을 진행합니다.
  6. 조건 검사

    1. 문자열 text에서 패턴 pattern을 탐색하기 위해서는 문자열 text를 슬라이싱한 결과의 길이가 len(pattern)과 같아야 합니다.
    2. 그러면 슬라이싱의 인덱스 시작점 i를 기준으로 슬라이싱의 인덱스 종료점은 i + len(pattern)이 됩니다. 그러므로 text[i : i + len(pattern)]를 통해 문자열을 슬라이싱하여 패턴 pattern을 탐색할 수 있습니다.
    3. 여기서 if text[i : i + len(pattern)] == pattern:을 이용하면, 탐색 슬라이싱 text[i : i + len(pattern)]이 패턴 pattern과 같다는 조건을 만족하는지 검사할 수 있습니다.
  7. 패턴 출현 횟수 갱신

    탐색 결과가 조건 검사의 조건을 만족한다면, 패턴을 찾은 것으로 패턴 출현 횟수 count에 1을 더해 값을 갱신합니다.

  8. 인덱스 시작점 갱신

    다음 탐색을 위해 인덱스 시작점 i에 1을 더해 값을 갱신합니다.

  9. 패턴 출현 횟수 반환

    while 문을 통해 최종적으로 갱신된 패턴 출현 횟수 count를 반환하여, 문자열 text에서 패턴 pattern이 연속적으로 출현하는 횟수를 반환합니다.

알아둬야 할 개념

while 문

풀이 2. find

def solution(data): **#1 함수 정의**
    data_str, target_str = data **#2 데이터 분리**
    count = 0 **#3 패턴 출현 횟수 초기화**
    start = 0 **#4 탐색 시작 인덱스 초기화**

    while True: **#5 while 문 무한반복**
        start = data_str.find(target_str, start) **#6 탐색 및 탐색 시작 인덱스 갱신**
        if start == -1: **#7 종료 조건 검사**
            break **#8 while 문 종료**
        count += 1 **#9 패턴 출현 횟수 갱신**
        start += 1 **#10 탐색 시작 인덱스 갱신**

    return count **#11 패턴 출현 횟수 반환**