저는 string을 쓸 때, char *형으로 바꾸고, string.h에 있는 문자열 함수를 주로 썼습니다. 그런데, 이것도 생각보다 귀찮더라고요. 이번 시간에는 의 find 함수에 대해서 알아보도록 하겠습니다. 레퍼런스에 보면 꽤 많은 원형이 있는데, 사실 둘만 알면 크게 어렵지 않아요. size_t find(const string &s|const char *s|char ch, size_t pos = 0); 첫 번째 인자로 string을 받거나, char형 포인터, 그러니까 문자열을 받거나, 문자 하나를 받습니다. 2번째 인자로 어느 위치에서부터 찾을 건지를 명시를 하는데요. 간단하게 말하면, string으로부터, 패턴이 매치되는 최초 위치를 찾는 함수입니다. 예제 프로그램을 보겠습니다. string이..
레퍼런스 검색 결과
java의 toString 메서드는, 객체의 정보를 리턴하는 역할을 합니다. 사실 이 부분에 대해서 저는 별로 중요하게 생각을 하지는 않았습니다. 이걸 보면 아직도 멀었다는 생각이 듭니다. 하여튼, Object의 정보는 언제 볼까요? 당연하게도, 디버깅을 할 때 어디서 잘못되었는지 보기 위해서 볼 겁니다. 기본적으로, 자바에서, 최상위 부모는 Object입니다. 따라서, 클래스에 toString이 override가 되어 있지 않으면, Object에 있는 toString을 부르게 됩니다. 이 함수를 봅시다. 그러면 뭔가 getClass().getName()에 @을 concat를 하고, hashCode값을 16진수화 시킨 것을 또 concat 한다는 것을 알 수 있어요. myClass 클래스를 선언하였습니다..
레퍼런스 사이트에서 보면, unordered_map의 insert나 delete나 find 함수는 평균적으로 O(1)이라고 나와 있습니다. 그런데, 최악의 경우, O(n)이라고 나와 있습니다. [관련글] 해쉬 테이블의 평균 복잡도를 분석해 봅시다. 왜 최악의 경우에 O(n)일까요? 이유는 간단합니다. Chaining 방식이 List이기 때문입니다. 그러면, 왜 최악의 경우에 선형 시간이 걸리는지는 해결이 된 셈입니다. 하나의 버킷에 좌르르륵 skew가 되어 있으면 List의 경우에는 계속 찾아야만 하니까 O(n)이 걸립니다. 그런데, 아무리 최악의 경우가 O(n)이라고 한다면, 저격 데이터를 만드는 게 굉장히 어렵다면 사실 그냥 써도 무난할 겁니다만. 생각보다 충돌이 극단적으로 일어나는 데이터를 만드는 ..
priority_queue는 코딩 테스트에서 꽤 빈도 높게 출제되고 있는 자료 구조 중 하나입니다. 물론, set이나 map도 많이 보이긴 합니다. 여태까지 코딩 테스트 문제들을 쭉 보았을 때, 우선 순위 큐, 줄여서 pq를 사용해서 푸는 문제가 꽤 많이 등장하였습니다. 자료구조나, 알고리즘 시간에 반드시 한 번 쯤은 짚고 넘어가는 것을 물어보았다는 것은, 기본을 보았다는 소리입니다. 이것은 한 마디로 top 메서드를 호출했을 때, 우선 순위가 가장 높은 것을 꺼내는 구조입니다. 그것이 전부입니다. 하지만, 그러한 작업과, 삽입, 삭제가 O(log)가 보장됩니다. 왜 그런지는 자료 구조 시간에 다시 언급해 드리도록 하겠습니다. 일단, 오늘은 log라는 것만 머릿속에 넣으시면 되겠습니다. 보통 저는 pq를..
생각보다 상당히 많이 쓰는 함수 중 하나는, java의 substring 함수입니다. 어떻게 쓰는 것인지 봅시다. String substring(int s); String substring(int s,int e); 첫 번째 함수는 시작 위치만 가지고 있어요. 위치 s에서부터, 끝까지 잘라낸 문자열을 리턴합니다. 2번째 메서드는, 시작 위치와 끝 위치를 가지고 있는데요. s에서부터 e-1까지 잘라낸 문자열을 리턴합니다. 예제 하나를 보고, 실생활 예제를 보도록 합시다. 5번째 줄에서, 문자열 "chogahui05"을 선언했습니다. 그러면, 메모리에 요렇게 할당이 될 거에요. pool에 "chogahui05"가 들어가 있습니다. 먼저, s1.substring(3)을 호출했어요. 그러면, 3번째 인덱스부터 끝..
최근댓글