<aside>
💬 lv1
, 문자열 처리
, 패턴 찾기
주어진 문자열과 패턴에 대해, 문자열에서 패턴이 몇 번 출현하는지 계산하는 코드를 작성해주세요. 문자열은 알파벳 소문자로만 구성되어 있으며, 패턴 역시 알파벳 소문자로만 구성된 비어있지 않은 문자열입니다. 문자열에서 패턴이 연속적으로 나타나는 횟수를 계산합니다.
입력 (문자열, 패턴) | 출력 (패턴 출현 횟수) |
---|---|
("hellohellohello", "hello") | 3 |
("ababab", "ab") | 3 |
("abcde", "f") | 0 |
문자열 내에서 지정된 패턴이 출현하는 횟수를 계산합니다. 예를 들어, "hellohellohello" 문자열에서 "hello" 패턴은 3번 연속적으로 출현합니다.
</aside>
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 패턴 출현 횟수 반환**
함수 정의
코드의 첫 부분에서 solution
이라는 함수를 정의합니다. 이 함수는 하나의 인자 data
를 받습니다. data
는 패턴 출현 횟수를 찾을 대상이 되는 문자열과 패턴입니다.
데이터 분리
data
의 문자열과 패턴을 text, pattern
으로 언패킹합니다.
패턴 출현 횟수 초기화
패턴 출현 횟수 count
에 초깃값으로 0을 할당합니다.
인덱스 시작점 초기화
while
문에서 패턴 pattern
을 탐색하기 위해서는 문자열 text
를 슬라이싱해야 합니다. 이때, 슬라이싱의 인덱스 시작점을 0부터 시작해야 슬라이딩하면서 순차적으로 pattern
탐색이 가능해집니다. 그러므로 인덱스 시작점 i
의 초깃값으로 0을 할당합니다.
탐색 조건 정의
while
문을 진행할 때마다 인덱스 시작점 i
를 1씩 증가시키면서 문자열 탐색을 진행합니다. 이때, i
를 증가시킬 수 있는 한계를 문자열 text
의 길이 len(text)
와 패턴 pattern
의 길이 len(pattern)
가 결정합니다.i
가 0일 때, 패턴의 문자열 text
의 마지막 인덱스 번호와 패턴 pattern
의 마지막 인덱스 번호를 비교하면 슬라이딩 가능한 횟수는 len(text) - pattern(text)
임을 확인할 수 있습니다.while
문에서 총 탐색 횟수는 1(i가 0일 때 탐색) + 슬라이딩 가능 횟수 len(text) - pattern(text)
입니다.i <= len(text) - len(pattern)
이 됩니다. 그다음 탐색 조건을 이용하여 while i <= len(text) - len(pattern):
을 만들어 탐색을 진행합니다.조건 검사
text
에서 패턴 pattern
을 탐색하기 위해서는 문자열 text
를 슬라이싱한 결과의 길이가 len(pattern)
과 같아야 합니다.i
를 기준으로 슬라이싱의 인덱스 종료점은 i + len(pattern)
이 됩니다. 그러므로 text[i : i + len(pattern)]
를 통해 문자열을 슬라이싱하여 패턴 pattern
을 탐색할 수 있습니다.if text[i : i + len(pattern)] == pattern:
을 이용하면, 탐색 슬라이싱 text[i : i + len(pattern)]
이 패턴 pattern
과 같다는 조건을 만족하는지 검사할 수 있습니다.패턴 출현 횟수 갱신
탐색 결과가 조건 검사의 조건을 만족한다면, 패턴을 찾은 것으로 패턴 출현 횟수 count
에 1을 더해 값을 갱신합니다.
인덱스 시작점 갱신
다음 탐색을 위해 인덱스 시작점 i
에 1을 더해 값을 갱신합니다.
패턴 출현 횟수 반환
while
문을 통해 최종적으로 갱신된 패턴 출현 횟수 count
를 반환하여, 문자열 text
에서 패턴 pattern
이 연속적으로 출현하는 횟수를 반환합니다.
while 문
기본 형태: while 조건식:
개념: while
문은 while
뒤에 오는 조건식이 참일 때, while
문 아래에 오는 실행할 코드를 실행합니다. 이러한 while
문의 특징을 이용하여 조건식이 참이 아닌 경우, while
문을 종료하게 하여 while
문 수행의 범위를 지정할 수 있습니다.
num = 0
while num <= 4:
print(num)
num += 1
'''
# 출력 결과
0
1
2
3
4
'''
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 패턴 출현 횟수 반환**