[C++] 코딩테스트 핵심 문법 정리: 파싱부터 수학 함수까지
1. 실수 제어 (반올림·올림·내림)
C++ <cmath> 헤더에서 제공하는 함수들입니다. 게임 물리 연산이나 재화 계산 시 빈번하게 사용됩니다.
| 기능 | 함수명 | 예시 (3.14) |
|---|---|---|
| 올림 | ceil() |
4.0 |
| 내림 | floor() |
3.0 |
| 반올림 | round() |
3.0 |
2. std::stringstream & 문자열 분리
문자열을 입출력 스트림으로 다루는 도구입니다. 공백 기반 분리와 형식 변환에 최적화되어 있습니다.
#include <sstream>
string str = "100 alpha 3.14";
stringstream ss(str);
int num; string s; float f;
ss >> num >> s >> f; // 공백 기준으로 자동 타입 변환 및 추출
string str = "100 alpha 3.14";
stringstream ss(str);
int num; string s; float f;
ss >> num >> s >> f; // 공백 기준으로 자동 타입 변환 및 추출
💡 특정 문자(Delimiter) 기준 분리
공백이 아닌 콤마(,) 등을 기준으로 자를 때는 getline()을 조합합니다.
string input = "apple,banana,orange";
stringstream ss(input);
string token;
while (getline(ss, token, ',')) {
cout << token << endl; // apple, banana, orange 순차 출력
}
stringstream ss(input);
string token;
while (getline(ss, token, ',')) {
cout << token << endl; // apple, banana, orange 순차 출력
}
4. 진법 변환 (std::hex 활용)
C++ 스트림 조작자(Stream Manipulator)를 사용하면 별도의 알고리즘 구현 없이도 10진수를 16진수 문자열로 간편하게 변환할 수 있습니다.
#include <iostream>
#include <sstream>
int decimal_num = 255;
stringstream ss;
// 10진수를 16진수 서식으로 스트림에 삽입
ss << hex << decimal_num;
string hex_res = ss.str(); // "ff" 저장
// 대문자 16진수가 필요하다면?
ss.str(""); ss.clear(); // 스트림 초기화
ss << uppercase << hex << decimal_num;
string hex_upper = ss.str(); // "FF" 저장
#include <sstream>
int decimal_num = 255;
stringstream ss;
// 10진수를 16진수 서식으로 스트림에 삽입
ss << hex << decimal_num;
string hex_res = ss.str(); // "ff" 저장
// 대문자 16진수가 필요하다면?
ss.str(""); ss.clear(); // 스트림 초기화
ss << uppercase << hex << decimal_num;
string hex_upper = ss.str(); // "FF" 저장
🚀 Point (Senior's View)
- 문제 인식:
stringstream은 편리하지만 내부적으로 문자열 복사본을 생성하므로 메모리 오버헤드가 발생합니다. - 전략적 사고: 모바일(Android Vulkan) 환경에서는 프레임 드랍을 막기 위해 런타임 중의 빈번한
string생성을 지양해야 합니다. - 최적화 대안: C++17의
std::string_view를 활용하여 메모리 할당 없이 O(1) 참조 분리를 구현하는 것이 고성능 클라이언트 개발의 핵심입니다.
'코딩테스트 준비' 카테고리의 다른 글
| C++ STL stack / queue 완전 정리 — LIFO vs FIFO 실전편 (0) | 2026.06.09 |
|---|---|
| C++ STL unordered_map 완전 정리 — 코딩테스트 실전편 (0) | 2026.06.09 |
| [Coding Test] 시뮬레이션 격자(Grid) 탐색 핵심 개념 정리 (dy, dx, Offset) (0) | 2026.06.01 |
| [C++] 배열과 리스트 그리고 벡터 (0) | 2026.01.26 |
| [C++ 코딩테스트] 시간복잡도 (0) | 2025.12.06 |