두 개의 문자열이 주어졌을 때, 먼저 첫 번째 문자열에서 두 문자열에 공통으로 나타나는 문자를 모두 제거하고, 남은 고유한(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"이 출력된 것을 확인할 수 있습니다.