본문 바로가기

C++

(3)
[백준] fread 사용법 입력을 받기 위한 cin의 호출 횟수가 100만개를 넘어가기 시작하면 입력을 받는 행위 자체만으로도 상당한 시간이 걸리게 된다. 이럴 땐 fread를 통하여 입력버퍼 접근 횟수를 줄여서 속도를 개선시킬 수 있다. 다음과 같은 FastInput 클래스를 만들어 두었다. 사용하고 싶은 곳에 선언한 후 기존의 cin을 사용하듯 fin을 사용하면 된다. 필요 헤더 #include #include 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 class FastInput { int size; char* b..
int 자릿수 log10을 이용해 구하기 int형의 자릿수를 세는 방법은, 1. 문자열로 바꿔서 길이를 측정 2. 10으로 나눠가며 자릿수를 직접 세는 방법 정도가 일반적일 것이다. 여기서 설명하려는 방법은 log10을 이용해 자릿수를 구하는 방법이다. 필요헤더 #include 1 2 int num = 77778899; int len = (int)log10(num) + 1; cs len의 값은 8이 나온다. 단, 0이나 음수의 자릿수는 구하지 못한다. 1 2 double num = 789.1234; int len = (int)log10(num) + 1; cs len의 값은 3이 나온다. 이와 같이 소수의 자릿수도 셀 수 있다. 단, 0.xxx나 음수의 자릿수는 구하지 못한다.
Split c++에는 split이 없으므로 편의상 미리 만들어두었다. stringstream이 있긴 하지만 원하는 구분자를 설정하기 위해선 결국 getline이란 함수도 추가로 써야하고 string자료형의 token도 같이 운영해줘야 하는 불편함이 있다. 또 stringstream은 어쩐 일인지 일반적인 복사처리에 비해 느리기도 하다. 그래서 다른 언어들 처럼 c++에서도 split을 사용할 수 있도록 미리 만들어 놓았다. 필요 헤더 #include #include #include 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 vector Split(string& str, char delimiter = ' ') { vector vec..