문자열 안에서 pat 이라는 문자열이 있는지 찾는 함수는 strstr이였습니다. wandbox에서는 생각보다 빠르게 그 함수가 동작하는데, 그 이유는 언젠가 한 번 문자열 알고리즘을 하면서 뜯어 본다고 했었어요. 사실 벌써부터 쉽지 않을 거 같은 예감이 드네요. 오늘은 문자열 안에 어떠한 문자가 있는지를 판단하는 함수를 배워볼 건데요. 그 함수는 strchr입니다. 원형을 봅시다. char *strchr(const char *str,int ch); char형 포인터를 리턴합니다. str이라는 문자 열에서, ch가 나타나는 최초의 위치를 리턴합니다. 만약에 나타나지 않는다면 NULL 값을 리턴해요. 어렵지 않아요. 예를 들어 문자열 str이 "chogahui05"가 있었다고 해 봅시다. 그러면 여기서, '..
전체 글 검색 결과
stable sort는, 정렬 알고리즘을 논할 때 간과하고 넘어가기 쉬운 키워드입니다. 하지만, 간과해서는 안 되는 것입니다. 이것이 대체 무엇을 의미할까요? 우선순위가 같은 데이터가 여러 개 있을 때, 정렬이 끝난 후에도, 순서가 유지되는 정렬을 stable sort라 합니다. 그렇지 않다면 unstable하다고 합니다. 예제를 하나 봅시다. n개의 데이터를 정렬한다고 해 봅시다. 매 회전마다 [i,e] 구간에 있는 원소들을 탐색해서, 가장 우선순위가 높은 원소가 있었던 위치를 lo라고 해 봅시다. 이 때 lo와 i에 있는 원소를 뒤바꾸는 정렬이 있다고 해 봅시다. 위에 있는 숫자는 숫자, 밑에 있는 숫자는 정렬 전 위치라고 해 봅시다. 만약에 숫자를 오름차순 정렬한다고 하면, 1이 0보다는 우선 순위..
SQL에서 널값, null은 무엇을 의미할까요? 알 수 없는 값을 의미합니다. 그렇기 때문에, 널 값 처리는 조심을 해야 하는데요. 몇 가지 쿼리의 결과가 어떻게 나오는지 보도록 합시다. MYSQL 5.7로 실행을 하였습니다. 먼저, null과 null은 다를까요? 알 수 없는 값과, 알 수 없는 값이 다른지 판단을 할 수 없어요. 그렇기 때문에, NULL이 떴어요. 반대로, null과 null이 같다고 할 수 있을까요? 그러면 이 쿼리의 출력 값은 어떻게 될까요? 제 환경에서는 NULL이 출력됩니다. 알 수 없는 값과 알 수 없는 값을 비교하면 같을 수도 있고, 다를 수도 있기 때문입니다. 상태가 정의되지 않습니다. 제 mysql에서는 null이 출력됩니다. 실제로, 널인지 아닌지는 is null, i..
strstr의 세부 구현은, 문자열 알고리즘을 하면서 차차 알아가도록 합시다. C언어에서, 어떤 문자열에서 특정한 문자열이 있는지 (패턴), 간단하게 찾기 위해서 strstr를 이용하면 좋습니다. 이 친구는 다음과 같이 씁니다. char *strstr(const char *str,const char *pat); str 안에 pat이 있는지 찾습니다. 만약에 있다면, 찾은 최초의 위치를 리턴합니다. 그렇지 않다면 NULL을 리턴합니다. 예를 들어서 설명해 보겠습니다. 저는 "chogahuigatrainlike"에서 "ga"를 찾으려고 합니다. 그러면 strstr은 어떤 것을 리턴할까요? char형 포인터를 리턴하니까, char형이 저장되어 있는 공간을 가리키는, 주솟값을 리턴할 건데요. str이 이런 식으..
재귀 함수를 배우셨으니까, 제일 유명한 문제 중 하나인 하노이탑 알고리즘을 구현해 봐야 겠어요. 보통 하노이의 탑 문제는 기둥이 3개이고, 작은 기둥 위에 큰 기둥이 올 수 없다는 조건이 걸려있는 문제를 말해요. 또 한 번에 하나의 원판을 옮길 수 있는데요. 물론 백준에는, 기둥이 4개이 문제도 보입니다. 그건 논외로 합시다. 99xx번대에 있던 걸로 기억하는데 말입니다. 이걸 어떻게 구현하면 좋을까요? 생각보다 난이도가 조금 있어 보이는데요. 답은 재귀에 있습니다. 이 부분에 대한 내용은 관련 글에 충분히 설명이 되어 있으니, 개념 이해가 아직 안 되셨다면 보시고 오시는 게 좋아 보입니다. [관련글] 재귀 함수가 무엇일까요? 먼저 기저 조건을 봅시다. 옮길 원판의 갯수가 0개이면 어떤가요? 어떠한 연산..
최근댓글