PS

어젯밤에 풀다 메모리 초과가 난 알고스팟을 해결했다.

memset

오늘 til을 쓰는 이유
메인에서 배열 초기화하는데 memset이 안 먹혀서 엄청 당황했다. memset(dist, INF, sizeof(dist));하고 돌렸는데 이상한 값만 가득 들어있는..!

memset으로 1바이트가 아닌 변수를 초기화할 때는 0 이외의 값을 사용하면 안 된다는 것을 알게되었다. memset(void * ptr, int value, size_t num)은 ptr에 의해 allocate된 memory block의 num 바이트 만큼을 value로 채우는 함수라고. 이때 각 byte 를 채우기 때문에 memset(dist, 4, sizeof(dist))으로 실행했을 때 dist[1][1]의 값이 00000000 00000000 00000000 00000100이 아니라 00000100 00000100 00000100 00000100이 저장되었던 것이다.

1 바이트 단위가 아닌 자료형을 0이 아닌 값으로 초기화할 때는 fill_n()등을 사용하자.