1. 이번 챕터에서 배운 것
코딩 테스트 문제를 풀다 보면 입력값을 파싱하고 변환하는 데 생각보다 많은 시간을 쓰게 된다. 이번 강의에서는 C++에서 자주 쓰이는 숫자 처리 함수 3가지와, 문자열을 스트림처럼 다루는 stringstream 활용법을 집중적으로 다뤘다.
모든 수학 함수(
round,ceil,floor)는#include <cmath>헤더가 필요하고, 문자열 스트림 관련 기능은#include <sstream>이 필요하다.
2. 숫자 다루기 — cmath 함수 3종
| 함수 | 동작 | 양수 예 | 음수 예 |
|---|---|---|---|
round(x) |
반올림 (0.5는 0에서 먼 쪽) | round(3.5) → 4 | round(-2.5) → -3 |
ceil(x) |
올림 | ceil(3.2) → 4 | ceil(-3.2) → -3 |
floor(x) |
내림 | floor(3.7) → 3 | floor(-3.7) → -4 |
주의: floor(-3.7)은 단순히 소수점을 버린 -3이 아니라 -4다. 음수에서 내림은 숫자가 더 작아지는 방향(더 음수)으로 간다.
3. stringstream — 문자열을 스트림처럼
stringstream은 문자열을 마치 cin처럼 다룰 수 있게 해주는 클래스다. 이미 갖고 있는 문자열에서 특정 타입의 값을 순서대로 추출하거나, 반대로 값을 문자열로 변환할 때 매우 유용하다.
공백 기준 분리
string str = "123 X 67";
stringstream stream(str);
int num; char c; float f;
stream >> num >> c >> f;
// num=123, c='X', f=67.0
4. 특정 문자 기준 분리 — getline
공백 외에 쉼표나 슬래시 같은 특정 문자로 구분된 문자열을 분리할 때는 getline(스트림, 버퍼, 구분자)를 사용한다.
string text = "apple,banana,grape,orange";
stringstream ss(text);
string token;
while (getline(ss, token, ',')) {
cout << token << endl;
}
// apple / banana / grape / orange
패턴 정리: >>는 공백 기준 분리, getline(ss, buf, 구분자)는 특정 문자 기준 분리.
5. 진법 변환 — hex 조작자 활용
10진수 → 16진수
int n = 4095;
stringstream ss;
ss << hex << n;
string h = ss.str(); // "fff"
16진수 → 10진수
string h = "ff";
stringstream ss(h);
int n;
ss >> hex >> n; // n = 255
방향 기억법: 10→16은 <<(출력 방향으로 넣기), 16→10은 >>(추출 방향으로 읽기).
6. 오늘의 회고
지금까지 입력값 파싱은 cin만 쓰거나 손으로 처리해왔는데, stringstream 하나로 타입 변환과 구분자 분리가 깔끔하게 해결된다는 게 인상적이었다. 특히 16진수 변환 시 hex 조작자를 쓰는 방식은 외워두면 실전에서 시간을 많이 아낄 수 있을 것 같다. 음수에서 floor와 단순 소수점 버리기의 차이는 헷갈리기 쉬운 부분이므로 따로 정리해뒀다.
'프로그래밍 > 코드카타' 카테고리의 다른 글
| [C++] 코딩테스트에서의 정렬 (0) | 2026.05.11 |
|---|---|
| [C++] 코딩테스트에서의 배열 (0) | 2026.05.07 |
| [C++] 재귀 함수를 코드로 (0) | 2026.05.06 |
| [코딩 테스트] 어떻게 준비하고 어떻게 풀어야 할까? (1) | 2026.04.27 |
| [코드카타] 프로그래머스 - 전력망을 둘로 나누기 (C++) (0) | 2026.04.07 |