Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 두 문자열의 공통되지 않은 문자만 추출해 연결하기

두 개의 문자열이 주어졌을 때, 먼저 첫 번째 문자열에서 두 문자열에 공통으로 나타나는 문자를 모두 제거하고, 남은 고유한(uncommon) 문자들끼리 이어 붙여 하나의 새로운 문자열을 만드는 문제입니다.

예제

입력 >> 첫 번째 문자열:: AABCD
두 번째 문자열:: MNAABP
출력 >> CDMNP

위 예제에서 'A'와 'B'는 두 문자열에 모두 존재하므로 제거되고, 첫 번째 문자열의 고유 문자 'C', 'D'와 두 번째 문자열의 고유 문자 'M', 'N', 'P'가 순서대로 연결되어 최종 결과가 만들어집니다.

알고리즘

Uncommonstring(s1, s2)
/* s1과 s2는 두 개의 문자열 */
1단계: 두 문자열을 각각 집합 st1과 st2로 변환한다.
2단계: 두 집합의 교집합을 구해 공통 문자 목록을 얻는다.
3단계: 각 문자열에서 공통 문자에 속하지 않는 문자만 분리한다.
4단계: 분리된 문자들을 공백 없이 이어 붙여 최종 문자열을 만든다.

예제 코드

# 두 문자열의 고유한 문자만 연결하기
def uncommonstring(s1, s2):
    # 두 문자열을 집합(set)으로 변환
    st1 = set(s1)
    st2 = set(s2)
    # 두 집합의 교집합으로 공통 문자 리스트 생성
    lst = list(st1 & st2)
    finallist = [i for i in s1 if i not in lst] + [i for i in s2 if i not in lst]
    print("CONCATENATED STRING IS :::", ''.join(finallist))

# 드라이버 프로그램
if __name__ == "__main__":
    s1 = input("Enter the String ::")
    s2 = input("Enter the String ::")
    uncommonstring(s1, s2)

코드 설명

set() 함수를 사용하면 문자열이 문자들의 집합으로 변환됩니다. 집합 자료형은 중복을 허용하지 않으므로, st1 & st2 연산(교집합)을 통해 두 문자열에 동시에 등장하는 문자를 손쉽게 찾을 수 있습니다.

이후 리스트 컴프리헨션(list comprehension)을 활용해 각 문자열을 순회하면서 공통 문자 목록에 포함되지 않은 문자만 골라냅니다. 첫 번째 문자열의 고유 문자 뒤에 두 번째 문자열의 고유 문자를 덧붙인 뒤, ''.join()으로 하나의 문자열로 합치면 원하는 결과를 얻을 수 있습니다.

실행 결과

Enter the String ::abcde
Enter the String ::bdkl
CONCATENATED STRING IS ::: acekl

위 실행 결과에서 'b'는 두 문자열에 모두 포함되어 있으므로 제거되었으며, 나머지 고유 문자들인 'a', 'c', 'e', 'k', 'l'이 차례로 연결되어 최종 문자열 "acekl"이 출력된 것을 확인할 수 있습니다.