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()
등을 사용하자.