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

Python으로 문자열의 인접 문자를 쌍 단위로 교환하는 방법

문자열 s가 주어졌을 때, 모든 홀수 위치의 문자와 짝수 위치의 문자를 서로 교환해야 하는 문제를 생각해 봅시다. 최종적으로 우리는 문자들이 두 개씩 짝지어 교환된 s의 순열(permutation)을 얻게 됩니다.

예를 들어 입력이 s = "programming"이라면, 출력은 "rpgoarmmnig"가 됩니다.

즉, 각 인접한 두 문자('p'와 'r', 'o'와 'g', 'a'와 'r' 등)가 서로 자리를 바꾸는 방식입니다.

문제 해결 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • 문자열 s를 문자들의 리스트로 변환합니다.
  • 인덱스 0부터 시작하여 2씩 증가시키며 리스트 끝까지 반복합니다.
  • 각 반복에서 현재 문자 s[i]와 다음 문자 s[i+1]의 위치를 서로 교환(swap)합니다.
  • 교환이 완료된 리스트의 문자들을 하나로 합쳐(join) 전체 문자열로 만든 후 반환합니다.

구현 예제

아래 구현 예제를 통해 더 잘 이해해 보겠습니다.

def solve(s):
    s = list(s)
    for i in range(0, len(s)-1, 2):
        s[i], s[i+1] = s[i+1], s[i]

    return ''.join(s)

s = "programming"
print(solve(s))

입력

"programming"

출력

rpgoarmmnig

코드 설명

list(s)를 사용하면 문자열이 개별 문자의 리스트로 변환되어, 파이썬의 튜플 언패킹(tuple unpacking) 기법 s[i], s[i+1] = s[i+1], s[i]로 두 문자를 손쉽게 교환할 수 있습니다. 반복 범위를 range(0, len(s)-1, 2)로 지정하면 0, 2, 4... 번째 인덱스만 순회하므로 문자열 길이가 홀수일 경우 마지막 문자는 그대로 유지됩니다. 마지막에는 ''.join(s)으로 리스트를 다시 문자열로 결합하여 결과를 반환합니다.

이 알고리즘의 시간 복잡도는 O(n), 공간 복잡도 역시 O(n)으로, 문자열 길이에 비례하여 선형적으로 동작하기 때문에 매우 효율적입니다.