문자열 안의 문자들이 특정 패턴과 동일한 순서로 등장하는지 확인해야 하는 경우, collections 모듈의 OrderedDict를 활용하면 간단하게 해결할 수 있습니다. OrderedDict는 키가 삽입된 순서를 그대로 유지하는 자료구조이기 때문에 문자열의 문자 순서 검증에 특히 적합합니다.
아래는 실제 구현 예제입니다.
예제 코드
from collections import OrderedDict
def check_order(my_input, my_pattern):
my_dict = OrderedDict.fromkeys(my_input)
pattern_length = 0
for key, value in my_dict.items():
if key == my_pattern[pattern_length]:
pattern_length += 1
if pattern_length == len(my_pattern):
return '패턴의 순서가 올바릅니다'
return '패턴의 순서가 올바르지 않습니다'
my_input = 'Hi Mark'
input_pattern = 'Ma'
print('입력 문자열:')
print(my_input)
print('확인할 패턴:')
print(input_pattern)
print(check_order(my_input, input_pattern))
실행 결과
입력 문자열: Hi Mark 확인할 패턴: Ma 패턴의 순서가 올바릅니다
코드 설명
collections모듈에서OrderedDict클래스를 가져옵니다.입력 문자열과 확인할 패턴, 두 개의 매개변수를 받는
check_order함수를 정의합니다.fromkeys메서드를 사용해 입력 문자열의 각 문자를 키로 가지는 순서형 딕셔너리를 생성합니다. 이 과정에서 중복된 문자는 자동으로 제거되고 첫 등장 순서만 유지됩니다.패턴의 진행 상황을 추적할
pattern_length변수를 0으로 초기화합니다.딕셔너리의 각 키(문자)를 순회하면서, 현재 비교 대상인 패턴 문자와 일치하면
pattern_length를 1씩 증가시킵니다.pattern_length가 패턴의 전체 길이에 도달하면 패턴의 모든 문자가 순서대로 발견된 것이므로 순서가 올바르다는 메시지를 반환하고, 문자열 순회가 끝날 때까지 조건을 만족하지 않으면 순서가 틀렸다는 메시지를 반환합니다.최종 결과 메시지가 콘솔에 출력됩니다.
참고로 Python 3.7부터는 일반 dict도 삽입 순서를 유지하지만, 순서 보장을 명시적으로 표현해야 하거나 이전 버전과의 호환성이 필요한 경우에는 OrderedDict를 사용하는 것이 좋습니다. 또한 이 알고리즘은 문자열을 한 번만 순회하므로 시간 복잡도가 O(n)으로 매우 효율적입니다.