Search

데이터형

int, 4바이트짜리 정수

4바이트짜리 정수를 사용할 때 쓰인다. 약 20억까지 표현할 수 있다.
즉, 문제를 푸는 코드에 들어가있는 값들의 예상값이 20억을 넘어간다면 int가 아닌 long long을 써야 한다.
보통 그리고 int의 최대값으로 20억까지가 아닌 987654321 또는 1e9를 쓴다.
const int INF = 987654321;
const int INF2 = 1e9;

int 연산

int로 선언한 변수 끼리 연산을 하게 되었을 때 실수가 나온다면 소수점 아래에 있는 수는 모두 버림이 된다.

const 키워드

const는 수정할 수 없는 변수를 말한다. 보통 INF나 방향벡터를 나타내는 dy, dx에 const를 쓴다.
예를 들어 문제에서 주어진 맵의 크기가 10 * 10 이기 때문에 10*10 2차원 배열을 만들어야 할 경우
const int mx = 10; int a[mx][mx];
C++
복사
어짜피 10이라는 숫자는 변하지 않는 상수이기 때문에 미리 설정해놓고 이를 기반으로 맵의 크기를 설정한다.

오버플로

타입의 허용범위를 넘어갈 때 발생하는 에러를 뜻한다. 예를 들어 int타입이라면 2,147,483,647을 넘어간다면 에러가 발생한다.
여기서 만약에 ++ 하면 최솟값인 -2,147,483,647로 간다

언더플로

반대로 취급할 수 있는 결과값보다 작아지게 되면 언더플로가 발생된다.

long long, 8바이트 짜리 정수

int로 표현이 안될 때 쓰면 된다.

double, 실수 타입

8바이트 이며 소수점 아래로 15자리 까지 표현이 가능함.
참고로 실수타입은 float도 있는데 이는 4바이트, 소수점 아래로 7자리까지 표현가능.
double이 더 정확하니까 double 쓰자.
double pi = 3.221;
C++
복사

unsinged long long, 8바이트 짜리 양의 정수

long long 에서 -로 표현할 범위를 몽땅 + 범위에 추가한 타입.

pair 와 tuple

pair와 tuple은 타입이나 자료구조는 아님. C++에서 자주 사용됨.
pair는 first 와 second 라는 멤버 변수를 가지는 클래스이다. 두 가지 값을 담아야 할 때 쓴다.
tuple은 세 가지 이상의 값을 담을 때 쓴다.
tie는 pair이나 tuple로부터 값을 끄집어낼 때 사용되는 함수이다.
int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); pair<int, int> pi; tuple<int, int, int> tl; int a, b, c; pi = { 1, 2 }; tl = make_tuple(1, 2, 3); tie(a, b) = pi; cout << a << " : " << b << '\n'; tie(a, b, c) = tl; cout << a << " : " << b << " : " << c << '\n'; return 0; }
C++
복사
pair의 경우 {a, b} 또는 make_pair(a, b)로 만들 수 있다. 그저 2개의 원소를 담은 바구니를 생각하면 된다.
이때 원래는 a = pi.first, b = pi.second 이런 식으로 끄집어내야 하는데, tie를 쓰면 tie(a, b) = pi 이렇게 끄집어 낼 수 있다.
int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); pair<int, int> pi; tuple<int, int, int> tl; int a, b, c; pi = { 1, 2 }; tl = make_tuple(1, 2, 3); a = pi.first; b = pi.second; a = get<0>(tl); b = get<1>(tl); c = get<2>(tl); cout << a << b << c << '\n'; }
C++
복사
tuple의 경우 get<0> 이런 식으로 값을 꺼내야 한다. 3가지 이상의 멤버 변수가 필요하면 보통 struct를 쓰는 게 더 편하다.

auto 타입

auto는 타입 추론을 해 결정되는 타입.
복잡하고 긴 타입의 변수명을 대신하는 간단한 방법이다.
#include <iostream> #include <algorithm> #include <string> #include <vector> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); vector<pair<int, int>> v; for (int i = 1; i <= 5; i++) { v.push_back({ i, i }); } for (auto it : v) { cout << it.first << " : " << it.second << '\n'; } for (pair<int, int> it : v) { cout << it.first << " : " << it.second << '\n'; } return 0; }
C++
복사

타입변환

int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); double ret = 2.12345; int n = 2; int a = (int)round(ret / double(n)); cout << a << '\n'; }
C++
복사
(바꿀타입) 기존변수
중요한 점은, 같은 타입끼리 연산을 해야한다. double은 double끼리, int는 int끼리 연산하게 타입변환을 해 놓고 연산하자.
int a = (int) p * 100
int a = (int) 100 * p
위에만 타입 변환이 된다.

문자를 숫자로, 숫자를 문자로

int main() { char a = 'a'; cout << (int)a << '\n'; cout << (int)a - 97 << '\n'; cout << (int)a - 'a' << '\n'; return 0; } /* 97 0 0 */
C++
복사
A~Z는 65~90 / a ~z는 97~122
(int)a는 97.