26개의 알파벳 문자 집합(a~z)이 있을 때, 이와 다른 순서로 배열된 새로운 문자 집합을 사용해 두 집합 사이의 대응 관계를 만드는 작업을 해보겠습니다. 즉, 새로운 문자 집합의 각 문자를 기존 알파벳과 매핑하여 입력된 문자열을 변환하는 것이 목표입니다.
예제
새로운 문자 집합: qwertyuiopasdfghjklzxcvbnm 입력: "wwmm" 출력: bbzy
위 예제에서 새로운 문자 집합은 키보드 배열 순서입니다. 'q'가 'a'에 해당하고, 'w'가 'b'에 해당하는 식으로 순서대로 매핑됩니다. 따라서 입력 "wwmm"에서 'w'→'b', 'm'→'z'로 변환되어 출력 "bbzy"가 됩니다.
알고리즘
1단계: 새로운 문자 집합과 변환할 입력 문자열을 준비합니다.
2단계: 원본 알파벳 문자 집합('abcdefghijklmnopqrstuvwxyz')도 함께 정의합니다.
3단계: 딕셔너리를 생성합니다. Python의 zip() 함수를 사용하면 영어 알파벳 집합과 새로운 문자 집합을 손쉽게 매핑할 수 있습니다. zip()은 두 문자 집합의 각 문자를 순서대로 짝지어 줍니다.
4단계: 원본 문자열을 반복(iterate)하면서 각 문자를 매핑된 새로운 문자로 치환합니다.
5단계: 치환된 문자들을 공백 없이 하나의 문자열로 연결(join)하여 최종 결과를 만듭니다.
예제 코드
# 문자열을 새로운 문자 집합으로 변환하는 함수
def newString(cs, n):
ori = 'abcdefghijklmnopqrstuvwxyz'
newchar = dict(zip(cs, ori))
newstr = [newchar[chr] for chr in n]
print(''.join(newstr))
# 드라이버 프로그램
if __name__ == "__main__":
newcharSet = 'qwertyuiopasdfghjklzxcvbnm'
input_str = 'wwmn'
newString(newcharSet, input_str)
코드 설명
dict(zip(cs, ori)) 부분이 핵심입니다. zip() 함수는 새로운 문자 집합(cs)과 원본 알파벳(ori)을 인덱스별로 묶어 튜플 쌍을 만들고, dict()가 이를 키-값 딕셔너리로 변환합니다. 그 결과 예를 들어 {'q': 'a', 'w': 'b', 'e': 'c', ...} 형태의 매핑 테이블이 완성됩니다.
이후 리스트 컴프리헨션(list comprehension)을 통해 입력 문자열의 각 문자를 딕셔너리에서 조회하여 새로운 문자로 바꾸고, join()으로 하나의 문자열로 합칩니다.
실행 결과
bbzy
입력 'wwmn'의 각 문자가 매핑 규칙에 따라 'b', 'b', 'z', 'y'로 변환되어 최종적으로 "bbzy"가 출력됩니다. 이처럼 zip() 함수를 활용하면 두 시퀀스 간의 대응 관계를 간결한 코드로 구현할 수 있으며, 암호화·복호화 로직이나 문자 치환 작업에 유용하게 응용할 수 있습니다.