문자열이 하나 주어졌을 때, 이를 두 가지 방향으로 회전시키는 것이 목표입니다. 하나는 시계 방향(오른쪽 회전), 다른 하나는 반시계 방향(왼쪽 회전)입니다.
1. 주어진 문자열을 d개의 요소만큼 왼쪽(반시계 방향)으로 회전합니다. (단, d <= n)
2. 주어진 문자열을 d개의 요소만큼 오른쪽(시계 방향)으로 회전합니다. (단, d <= n)
예제
입력: string = "pythonprogram" d = 2 출력: 왼쪽 회전: thonprogrampy 오른쪽 회전: ampythonprogr
알고리즘
1단계: 문자열을 입력받습니다.
2단계: 문자열을 두 부분으로 나눕니다.
- 왼쪽 회전: Lfirst = str[0 : d], Lsecond = str[d :]
- 오른쪽 회전: Rfirst = str[0 : len(str)-d], Rsecond = str[len(str)-d :]
3단계: 두 부분을 second + first 순서로 이어 붙입니다.핵심 개념: 문자열 슬라이싱
파이썬에서는 슬라이싱(slicing) 문법인 str[start:end]를 사용해 문자열의 특정 구간을 손쉽게 추출할 수 있습니다. 이 특성을 활용하면 별도의 반복문 없이 한 줄씩만으로 문자열 회전을 구현할 수 있습니다.
- 왼쪽 회전: 앞부분(d번째까지)을 잘라 뒤로 보냅니다 →
str[d:] + str[:d] - 오른쪽 회전: 뒷부분(마지막 d개)을 잘라 앞으로 보냅니다 →
str[-d:] + str[:-d]
예제 코드
def rotate(input, d):
# 왼쪽 회전과 오른쪽 회전을 위해 문자열을 두 부분으로 나눔
Lfirst = input[0 : d]
Lsecond = input[d :]
Rfirst = input[0 : len(input) - d]
Rsecond = input[len(input) - d :]
print("Left Rotation : ", (Lsecond + Lfirst))
print("Right Rotation : ", (Rsecond + Rfirst))
# 드라이버 프로그램
if __name__ == "__main__":
s = input("Enter String ::>")
d = 2
rotate(s, d)실행 결과
Enter String ::> pythonprogram Left Rotation : thonprogrampy Right Rotation : ampythonprogr
동작 원리 살펴보기
입력 문자열이 "pythonprogram"이고 d가 2일 때의 동작 과정은 다음과 같습니다.
왼쪽 회전 (반시계 방향)
- Lfirst =
"py"(인덱스 0~1) - Lsecond =
"thonprogram"(인덱스 2부터 끝까지) - 결합 결과:
"thonprogram" + "py"→ thonprogrampy
오른쪽 회전 (시계 방향)
- Rfirst =
"pythonprogr"(처음부터 뒤에서 2글자 앞까지) - Rsecond =
"am"(마지막 2글자) - 결합 결과:
"am" + "pythonprogr"→ ampythonprogr
마무리
이처럼 파이썬의 문자열 슬라이싱을 활용하면 반복문이나 추가 라이브러리 없이도 간결하고 직관적으로 문자열 회전을 구현할 수 있습니다. 시간 복잡도는 O(n)으로 효율적이며, 코딩 테스트나 실무에서 자주 활용되는 기본 패턴이니 꼭 익혀두시기 바랍니다.