가장 기본적이지만 코테에서 자주 쓰입니다.
| 주제 | 핵심 문법 / 예제 |
|---|---|
| 문자열 슬라이싱 | s[1:4], s[::-1] (뒤집기), s[-1] |
| 문자열 합치기 | ''.join(list), ' '.join(words) |
| 문자열 분리 | s.split(), s.split(',') |
| 문자 세기 | s.count('a'), collections.Counter(s) |
| 문자열 정렬 | sorted(s), ''.join(sorted(s, reverse=True)) |
| 대소문자 변환 | s.upper(), s.lower(), s.swapcase() |
| 문자 확인 | s.isdigit(), s.isalpha(), s.isalnum(), s.isspace() |
| 문자열 찾기 | s.find('abc'), s.index('abc'), 'abc' in s |
| 문자열 포맷 | f"{변수}", "{} {}".format(a, b) |
파싱 문제는 입력에서 필요한 정보만 추출하는 문제입니다.
보통 구분자(split), 정규식(re), 슬라이싱이 핵심이에요.
data = "name:John,age:30,city:Seoul"
info = {k: v for k, v in [x.split(':') for x in data.split(',')]}
print(info) # {'name': 'John', 'age': '30', 'city': 'Seoul'}
s = "abc123def456"
numbers = ''.join(ch for ch in s if ch.isdigit())
print(numbers) # '123456'
import re
text = "Order#1234: price=5600KRW"
num = re.findall(r'\\d+', text)
print(num) # ['1234', '5600']
import re
s = "foo(bar)baz(qux)"
res = re.findall(r'\\((.*?)\\)', s)
print(res) # ['bar', 'qux']
코테에서는 단순 파싱보다 로직과 결합된 문자열 처리가 자주 나옵니다.
| 유형 | 설명 | 예시 |
|---|---|---|
| 회문 검사 | 앞뒤 대칭 확인 | s == s[::-1] |
| 아나그램 | 정렬해서 비교 | sorted(s1) == sorted(s2) |
| 중복 제거 | ''.join(dict.fromkeys(s)) |
|
| 압축 | 같은 문자 연속 개수 세기 | aabb → a2b2 |
| 패턴 매칭 | 부분 문자열 탐색 (KMP, 슬라이딩 윈도우) | "abc" in s |
| 단어 빈도 | Counter 활용 | Counter(s.split()) |
| 유효한 괄호 | 스택으로 구현 | '()[]{}' 검사 |
| 문자열 뒤집기 | s[::-1] or 부분 단위 reverse |
|
| Caesar cipher | chr((ord(ch)-97+k)%26+97) |