코딩테스트 준비

[C++] 코딩테스트 핵심 문법 정리: 파싱부터 수학 함수까지

Client Side 2026. 5. 11. 20:27

[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; // 공백 기준으로 자동 타입 변환 및 추출

💡 특정 문자(Delimiter) 기준 분리

공백이 아닌 콤마(,) 등을 기준으로 자를 때는 getline()을 조합합니다.

string input = "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" 저장

🚀 Point (Senior's View)

  • 문제 인식: stringstream은 편리하지만 내부적으로 문자열 복사본을 생성하므로 메모리 오버헤드가 발생합니다.
  • 전략적 사고: 모바일(Android Vulkan) 환경에서는 프레임 드랍을 막기 위해 런타임 중의 빈번한 string 생성을 지양해야 합니다.
  • 최적화 대안: C++17의 std::string_view를 활용하여 메모리 할당 없이 O(1) 참조 분리를 구현하는 것이 고성능 클라이언트 개발의 핵심입니다.