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

Python에서 두 문자열을 번갈아 병합하는 프로그램

길이가 같은 두 문자열 st가 주어졌다고 가정해 보겠습니다. 목표는 두 문자열의 글자를 한 글자씩 번갈아 가며 하나의 새로운 문자열로 병합하는 것입니다. 즉, s의 i번째 글자 다음에 t의 i번째 글자를 이어 붙이고, 그다음 글자로 넘어가는 방식으로 전체 문자열을 완성합니다.

예를 들어 입력이 s = "hello", t = "world"라면, h → w → e → o → l → r → l → l → o → d 순서로 글자가 배치되어 최종 출력은 "hweolrllod"가 됩니다.

문제 해결 접근 방법

이 문제는 Python의 내장 함수 zip()join()을 활용하면 매우 간단하게 해결할 수 있습니다. 풀이 과정은 다음과 같습니다.

  • zip()으로 묶기: zip(s, t)를 실행하면 (s[0], t[0]), (s[1], t[1])처럼 각 위치의 글자들이 쌍(pair)으로 묶입니다.
  • 쌍을 문자열로 결합: 각 쌍 (s[i], t[i])에 대해 두 글자를 이어 붙여 하나의 문자열 조각으로 만든 리스트를 구성합니다.
  • join()으로 최종 병합: 모든 문자열 조각을 ''.join()으로 합쳐 최종 결과 문자열을 반환합니다.

구현 예제

다음 코드를 통해 실제 동작을 확인해 보겠습니다.

def solve(s, t):
    zipped = list(zip(s, t))
    zipped = map(lambda x: x[0]+x[1], zipped)
    return ''.join(zipped)

s = "hello"
t = "world"
print(solve(s, t))

입력

"hello", "world"

출력

hweolrllod

동작 원리 상세 설명

위 코드에서 list(zip("hello", "world"))를 실행하면 [('h', 'w'), ('e', 'o'), ('l', 'r'), ('l', 'l'), ('o', 'd')]처럼 쌍들의 리스트가 생성됩니다. 이후 map 함수와 람다(lambda) 표현식을 사용해 각 쌍을 'hw', 'eo', 'lr', 'll', 'od'와 같은 문자열 조각으로 변환하고, 마지막에 join()을 호출하면 조각들이 순서대로 연결되어 "hweolrllod"가 완성됩니다.

더 간결한 제너레이터 표현식으로도 작성할 수 있습니다.

def solve(s, t):
    return ''.join(a + b for a, b in zip(s, t))

이 방법은 중간 리스트를 생성하지 않으므로 메모리 측면에서 더 효율적입니다. 두 문자열의 길이를 n이라 할 때 시간 복잡도는 O(n), 공간 복잡도는 결과 문자열 저장을 위해 O(n)입니다.