사용자가 입력한 두 개의 문자열이 주어졌을 때, 두 문자열에 공통으로 포함된 문자들을 알파벳 순서로 정렬하여 출력하는 것이 이번 튜토리얼의 목표입니다.
예제
입력: string1: python string2: program 출력: op
설명
두 문자열 사이에서 공통으로 나타나는 문자는 o(1회)와 p(1회)입니다. 따라서 최종 결과는 알파벳 순서대로 정렬된 "op"가 됩니다.
알고리즘
Step 1: 사용자로부터 두 개의 문자열을 입력받습니다. Step 2: 두 문자열을 각각 Counter 딕셔너리로 변환합니다. Step 3: intersection(&) 연산자를 사용하여 두 문자열 간의 공통 요소를 찾습니다. Step 4: 결과 역시 Counter 딕셔너리 형태이며, 공통 문자가 키(key)로, 공통 빈도수가 값(value)으로 저장됩니다. Step 5: Counter 딕셔너리의 elements() 메서드를 사용하여 각 키를 해당 빈도수만큼 반복해 리스트로 확장합니다. Step 6: 리스트를 오름차순으로 정렬하여 결과 문자열을 알파벳 순서로 만듭니다. Step 7: 문자들을 공백 없이 연결(join)하여 최종 결과 문자열을 생성합니다.
예제 코드
from collections import Counter
def common(str1, str2):
d1 = Counter(str1)
d2 = Counter(str2)
cdict = d1 & d2
if len(cdict) == 0:
print(-1)
return
cchars = list(cdict.elements())
cchars = sorted(cchars)
print("Common characters are ::>", ''.join(cchars))
# Driver program
if __name__ == "__main__":
s1 = input("Enter first string")
s2 = input("Enter second string")
common(s1, s2)코드 설명
위 코드에서 Counter는 collections 모듈에서 제공하는 클래스로, 문자열 내 각 문자의 출현 빈도를 자동으로 계산해 딕셔너리 형태로 저장합니다. 두 Counter 객체에 &(교집합) 연산을 적용하면 양쪽 문자열 모두에 존재하는 문자와 그 최소 빈도수를 얻을 수 있습니다. 만약 공통 문자가 하나도 없다면 -1을 출력하고 함수를 종료합니다. elements() 메서드는 각 문자를 빈도수만큼 반복하여 반환하며, sorted()로 정렬한 뒤 join()으로 하나의 문자열로 합칩니다.
실행 결과
Enter first string python Enter second string program Common characters are ::> op