목록공부/C++ 메모사항 (5)
The Way
요약: 몫은 양수 나눗셈 기준으로 부호만 맞추어주면 되고, (나누는 두 수의 부호가 같으면 몫이 양수, 다르면 몫이 음수) 나머지는 위에서 구한 몫으로, $a = bq + r$를 만족하는 값이 된다. -------------------------------------------------- 나눗셈의 몫과 나머지는 무엇일까? 일반적으로 통용되는 정의를 따져보면, 정수 a를 0이 아닌 정수 b로 나누었을때, $a = bq + r\;(0 \le r < |b|)$를 만족하는 수 q가 몫이고, r이 나머지이다. 이는 명백해보이지만, 음수가 들어가면 약간 애매해진다. 예를 들어서 -7을 3으로 나누면 몫과 나머지는 무엇일까? 정의에 따르면, $-7 = 3\times(-3) + 2\;(0 \le 2 < |3|)$이므..
C에는 온갖 입출력 함수들이 많다. 당장 출력만 해도 putchar, putc, fputc, puts, fputs, fwrite, printf, fprintf의 8개 정도 함수를 손에 꼽을 수 있을 것 같다. 함수들의 출력속도에는 상당한 차이가 있다. 그것도 꽤 많은 차이가 난다. https://www.acmicpc.net/blog/view/57 백준 블로그인데, 여기에 함수들의 출력 속도 차이가 적혀있다. fwrite가 가장 빠르다고 나온다. 저 함수들 중 몇 개가 비어있기 때문에, 마저 채우는 느낌에서 속도를 측정해보았다. 백준에서는 숫자를 1부터 1000만까지 출력하였지만, 약간 특수한 상황이므로 이번 테스트에서는 더 본질적인 메모리에 있는 문자열을 그대로 출력하기를 해 보았다. 구체적인 테스트 방..
windows로 c++ 코딩을 할 때, 디버깅을 할 때 vector, string, map 등의 stl이 예쁘게 출력되지 않는 경우가 있다. Visual Studio로 할 경우에는 대체로 문제가 없는 편인데, Dev c++이나 Visual Studio Code, Code::Blocks 등을 사용할때는 (적어도 나는) 항상 이런 문제가 발생했다. arr는 vector인데, 안의 원소가 안보이고 메모리 주소만 잔뜩 보인다. PS를 하면서 STL은 필수적인데, 디버깅 할때 안의 원소를 보지 못한다는 것은 가히 치명적이라고 할 수 있다.그냥 Visual Studio를 쓰면 안되냐고 물을 수 있는데,Visual Studio은 너무 무겁기도 하고, 오픈 소스도 아니고,g++이 아니라 #include 을 못 쓴다거나..
algorithm에 포함되어 있는 lower_bound와 upper_bound 덕분에 앞으로 코딩이 조금 편해질 것 같은데,이름 때문인지 약간 헷갈려서 정리하고 가는 것이 좋을 것 같다. 기본적인 사용법 int arr[size] = {...}; int* ptr = lower_bound(arr, arr + size, n); 여기서 n은 찾고자 하는 수이다 반환되는 값은 다음과 같다. * lower_bound: n 이상의 수 중 가장 작은 것* upper_bound: n 초과의 수 중 가장 작은 것 (정확히는 pointer나 iterator가 반환된다)이렇게만 알아놓으면 헷갈릴 일은 없을 것 같다. int arr[2] = {3, 5};일 때 i = 0 ~ 7에 대해 각각 함수가 반환하는 포인터가 가리키는 값..
C++ 코딩용으로 Visual Studio 2015를 사용할 때scanf를 사용하려고 하면 C4996 에러가 발생한다. 해석하자면, scanf 함수가 안전하지 않아 scanf_s를 사용하라고 적혀있다. 또는, _CRT_SECURE_NO_WARNINGS를 사용하라고 한다. 예시 코드는 다음과 같다. #include using namespace std; int main() { int n; scanf("%d", &n); for (int i = 1; i