#include <bits/stdc++.h>
표준 라이브러리 전체를 포함시키는 g++컴파일러의 기능이다. 이 것을 사용하면 iostream, vecotr, algorith 등의 라이브러리를 개별적으로 포함시키지 않다도 사용가능하다.
string s;
getline(cin, s)
입력 한줄을 통째로, 공백을 포함한 채로 읽어 들이는 방법
while(cin >> x)
만일 데이터의 양을 사전에 알수 없다면 사용.
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
몇몇 대회 시스템은 입력과 출력을 위해 파일을 사용하기도 한다. 이를 간단하게 처리하는 방법은 평소처럼 표준스트림을 사용하는 코드를 작성한 후, 위 두줄을 코드의 시작 부분에 추가한다.
ios::sync_with_stdio(0);
cin.tie(0);
코드 시작부분에 위 코드를 넣으면 입력과 출력을 좀더 효율적으로 할 수 있다.
단, 이코드를 사용했을 때는 scanf, printf와 같은 C언어 입출력 함수를 C++입출력 함수와 동시에 사용할 수 없다.
"\n" vs endl
개행 문자 "\n"는 endl보다 빠르다. 이는 endl을 상ㅇ하면 명시적으로 flush가 일어나기 때문이다.
long long x = 123456789123456789LL;
int 범위(32bits) = -2 * 10의 9승 ~ 2 * 10의 9승
long long범위(64bits) = -9 * 10의 18승 ~ 9 * 10의 18승
int a = 123456789;
long long b = a*a;
cout << b << "\n"; //-1757895751
"a*a"를 저장하는 변수는 long long이지만, 계산은 결과가 int으로 되기때문에 에러를 유발한다.
a자료형을 long long으로 바꾸던지, (long long )a*a 으로 코드를 수정해야 한다.
나머지 연산 - skip
if(abs(a-b) < 1e-9){
// a와 b가 일치한다
}
부동 소수점 실수를 == 연산자를 이용하여 비교하는 것은 위험한데, 이는 비교하는 값이 실제로는 일치하지만, 정밀도 오류로 인해 다르다는 결과가 나올 수도 있기 때문이다. 좀더 나은 방법은 두 실수의 차이가 x보다 작을 때 서로 일치한다고 판단하는 것이 좋다.
'정보올림피아드-KOI > 알고리즘 트레이닝' 카테고리의 다른 글
[이코테] 곱하기 혹은 더하기 (0) | 2020.12.14 |
---|---|
[이코테] 1이 될때까지 (0) | 2020.12.14 |
힙 정렬 - Heap sort (0) | 2020.04.08 |
Priority_Queue 사용법 (0) | 2020.04.08 |
2장. 프로그래밍 기법 (2.2 재귀적 알고리즘), Recursion (0) | 2020.03.22 |