문자열 파싱이란?
파싱(parsing) 은 형식이 있는 문자열에서 의미 있는 조각(토큰)을 뽑아내는
일입니다. "3 + 4 * 2"에서 숫자와 연산자를 분리하거나, "2026-06-05"에서 연·월·
일을 떼어 내는 것이 모두 파싱입니다.
문제에서 입력이 단순한 정수 나열이 아니라 구분자·기호·단어가 섞인 형식으로
주어지면 파싱 능력이 필요합니다.
1. 가장 흔한 작업: 구분자로 자르기
공백이나 쉼표 같은 구분자(delimiter) 로 문자열을 토막 내는 것이 기본입니다.
"apple,banana,cherry" --쉼표로 자르면--> ["apple", "banana", "cherry"]
파이썬은 split이 매우 강력하고, C++은 stringstream이나 직접 순회로 처리합니다.
2. 공백 기준 토큰화
가장 자주 만나는 형식은 공백으로 나뉜 토큰입니다.
"GCC 13 cpp" → 단어 "GCC", "cpp" 와 숫자 13
이때 단어와 숫자가 섞여 있으면, 잘라낸 토큰을 보고 숫자처럼 생겼으면 정수로
변환하는 식으로 처리합니다.
3. 숫자만 뽑아내기
문장 속에 흩어진 숫자만 추출해야 할 때가 있습니다. 한 글자씩 보면서
- 숫자(
'0'~'9')면 현재 숫자에 이어 붙이고, - 숫자가 아니면 지금까지 모은 숫자를 하나의 수로 확정한다.
이 "상태를 들고 한 글자씩 읽는" 패턴이 파싱의 핵심 기술입니다. 음수 부호나
소수점이 끼면 조건을 추가하면 됩니다.
4. 한 글자씩 읽는 상태 기계
복잡한 형식(예: 수식, 좌표 (3,4), 시각 12:30)은 현재 무엇을 읽는 중인지를
상태로 들고 한 글자씩 처리하는 방식이 가장 견고합니다.
| 상태 | 글자가 숫자 | 글자가 기호 |
|---|---|---|
| 숫자 읽는 중 | 이어 붙임 | 숫자 확정, 기호 처리 |
| 기호 기다림 | 새 숫자 시작 | 기호 처리 |
이 사고법은 나중에 컴파일러·인터프리터의 토크나이저까지 그대로 이어집니다.
5. 자주 마주치는 함정
- 줄 단위 입력 vs 토큰 단위 입력 섞임 — 정수를
cin >> n으로 읽은 뒤
getline으로 줄을 읽으면, 남아 있던 줄바꿈이 빈 줄로 읽힙니다. 줄바꿈을
먼저 비워 줘야 합니다. - 연속된 구분자 —
"a,,b"처럼 빈 토큰이 생기는 경우를 어떻게 다룰지 정하세요. - 앞뒤 공백 — 입력 끝의 공백·줄바꿈을 제거(trim)해야 할 때가 많습니다.
정리
파싱은 "형식 있는 문자열 → 의미 있는 토큰"입니다. 구분자로 자르기, 숫자 추출,
한 글자씩 읽는 상태 기계 — 이 세 가지면 Silver 수준의 파싱은 대부분 해결됩니다.
다음 강의에서 구체적인 도구를 익힙니다.