이 글에서는 파이썬에서 문자열에 포함된 특정 위치(i번째 인덱스)의 문자를 제거하는 방법을 알아보겠습니다.
문제 정의
문제: 하나의 문자열이 주어졌을 때, 해당 문자열에서 i번째 인덱스에 있는 문자를 제거한 뒤 그 결과를 출력해야 합니다.
파이썬에서 문자열의 인덱싱은 항상 0부터 시작한다는 점을 먼저 기억해야 합니다. 예를 들어 "tutorialspoint"라는 문자열이 있다면 각 문자의 인덱스는 아래와 같이 매겨집니다.
T u t o r i a l s p o i n t 0 1 2 3 4 5 6 7 8 9 10 11 12 13
즉, 첫 번째 문자 'T'는 0번 인덱스를 가지며, 마지막 문자 't'는 13번 인덱스를 가집니다.
해결 방법: 문자열 슬라이싱
파이썬의 문자열은 불변(immutable) 자료형이기 때문에 특정 문자를 직접 삭제할 수 없습니다. 대신 슬라이싱(slicing)을 활용하여 해당 문자 앞부분과 뒷부분을 잘라낸 후 다시 이어 붙이는 방식으로 문제를 해결할 수 있습니다.
예제 코드
def remove(string, i):
# 0번째부터 i번째 인덱스 직전까지 슬라이싱
a = string[:i]
# i+1번째 인덱스부터 끝까지 슬라이싱
b = string[i + 1:]
# 두 부분을 합쳐서 반환
return a + b
# 실행 코드
if __name__ == '__main__':
string = "Tutorialspoint"
# 제거할 문자의 인덱스 지정
i = 8
print(remove(string, i))
실행 결과
Tutorialpoint
위 코드에서는 8번 인덱스에 있는 문자 's'가 제거되어 "Tutorialpoint"가 출력됩니다.
알고리즘 설명
전체 알고리즘은 다음과 같이 정리할 수 있습니다.
- 입력받은 문자열에서 제거할 i번째 인덱스를 확인합니다.
- 문자열을 두 부분으로 나눕니다 — i번째 문자 앞부분(string[:i])과 뒷부분(string[i+1:])입니다.
- i번째 문자는 두 조각 사이에서 자연스럽게 제외됩니다.
- 앞부분과 뒷부분을 연결(concatenate)한 새로운 문자열을 반환합니다.
이 방식의 시간 복잡도는 O(n)으로, 문자열의 길이에 비례하며 매우 효율적입니다.
다른 방법: join() 함수 활용
슬라이싱 외에도 join()과 enumerate()를 조합하면 다음과 같이 구현할 수 있습니다.
def remove(string, i):
return ''.join(ch for idx, ch in enumerate(string) if idx != i)
print(remove("Tutorialspoint", 8)) # 출력: Tutorialpoint
두 방법 모두 원본 문자열은 그대로 유지되며, 새로운 문자열이 생성된다는 점에서 파이썬 문자열의 불변성 특성을 잘 보여줍니다.
마무리
이번 글에서는 파이썬 3.x 환경에서 주어진 문자열에서 i번째 인덱스의 문자를 제거하는 방법을 배웠습니다. 핵심은 문자열이 수정 불가능한 자료형이라는 점을 이해하고, 슬라이싱 또는 join()을 통해 새로운 문자열을 만드는 것입니다. 이 기법은 문자열 전처리, 데이터 클렌징 등 실무에서도 자주 활용되니 꼭 익혀두시길 바랍니다.