Lesson 문자열의 개념: 글자들의 배열
문자열이란
문자열(string) 은 글자들을 순서대로 늘어놓은 것입니다. 앞 강의에서 문자가
곧 숫자(아스키 코드)임을 보았는데, 문자열은 그런 문자들을 이어 붙인 배열로
생각하면 됩니다. "cat"은 ['c', 'a', 't']라는 길이 3짜리 배열입니다.
프로그래밍에서 문자열을 다루는 방식은 크게 둘입니다.
- 문자 배열(
C스타일,char s[]): 끝을 알리는 널 문자'\0'으로 끝남. - 문자열 객체(
C++의std::string, 파이썬의str): 길이를 스스로 알고,
이어 붙이기·부분 문자열 같은 연산을 메서드로 제공.
대회에서는 특별한 이유가 없으면 문자열 객체를 씁니다. 안전하고 편합니다.
인덱스와 길이
문자열의 각 글자는 \(0\)번부터 번호가 매겨집니다(0-인덱스). 길이가 \(N\)이면
유효한 인덱스는 \(0\)부터 \(N-1\)까지입니다.
문자열: b a n a n a
인덱스: 0 1 2 3 4 5 (길이 6)
s[0]은 첫 글자 'b', s[5]는 마지막 글자 'a', s[6]은 범위 밖입니다.
이 마지막 인덱스 실수(off-by-one)가 문자열 버그의 절반을 차지합니다.
기본 연산 한눈에 보기
| 연산 | 뜻 | C++ | Python |
|---|---|---|---|
| 길이 | 글자 수 | s.size() |
len(s) |
| 인덱싱 | \(i\)번째 글자 | s[i] |
s[i] |
| 이어붙이기 | 두 문자열 연결 | a + b |
a + b |
| 비교 | 사전순 대소 | a < b |
a < b |
| 부분 문자열 | 잘라내기 | s.substr(i, len) |
s[i:i+len] |
| 탐색 | 위치 찾기 | s.find(t) |
s.find(t) |
작은 예제로 감 잡기
s = "programming" (\(N = 11\))에서:
s[0]은'p',s[N-1]은'g'.s.substr(0, 4)(파이썬s[0:4])는"prog".s.find("gram")은 \(3\) (부분 문자열이 시작하는 인덱스).s + "!"는"programming!".
복잡도 감각
- 인덱싱
s[i], 길이 확인은 \(O(1)\). - 전체 순회, 비교, 탐색(단순)은 길이에 비례해 \(O(N)\).
- 이어붙이기 주의: 루프 안에서 매번
s = s + c를 하면 매번 복사가 일어나
최악 \(O(N^2)\)이 될 수 있습니다. 뒤에 붙이는 append(push_back/리스트 후 join)를
쓰는 것이 핵심입니다.
정리
- 문자열은 문자들의 0-인덱스 배열.
- 길이 \(N\)이면 유효 인덱스는 \(0 \dots N-1\).
- 길이·인덱싱·이어붙이기·비교·부분 문자열·탐색이 6대 기본 연산.
- 반복 이어붙이기는 \(O(N^2)\) 함정 — append 방식을 쓴다.
다음 강의에서 C++/파이썬 구현 문법과 순회·뒤집기 등을 자세히 봅니다.