문자열 데이터를 가지고, 특수한 형태로 가공하는 것은 프로그래밍을 하다 보면 자주 보이는 문제 중 하나입니다. 예를 들자면, 전화번호를 가지고 앞에 국번만 따서 어느 지역인지 알아내거나, 이메일 주소를 통해서, 어느 메일을 쓰는지 알아내거나. 이러한 문제들이 많은데요. 오늘은 그 중, instr을 알아보도록 하겠습니다. C언어에서 strstr을 생각하시면 좋습니다. 다만, 다른점은 strstr은 해당 pattern이 나타나는 처음 address를 리턴한다는 것입니다. 먼저, 1번째 인자는 string, 2번째 인자는 pattern입니다. 즉, string 안에 pattern이 있는지 확인을 합니다. 만약에 있다면, 처음 패턴이 나타난 위치를 리턴합니다. 예를 들어서, 전화번호에서 국번을 찾아야 하는 경우..
전체 글 검색 결과
팬케이크 정렬은 유튜브에서 영상으로 한 번 쯤은 보셨을 겁니다. 이것을 최소한으로 뒤집는 횟수를 구하는 것은 경시 대회 이상에서 나올 만한 문제입니다. 우리는 단지, 어떻게 잘 뒤집어서 정렬을 잘 시키면 됩니다. 팬 케이크 더미에서는 위에서 k개만 뒤집을 수 있습니다. 단, k는 총 갯수보다 작을 거에요. 갯수를 n개라고 한다면 2n-3번 이하 뒤집어야 합니다. 이 때에는 어떻게 해야 할까요? 사실, 잘 모르겠습니다. 일단, 1회전이 끝날 때 마다, 2회의 단위 연산을 수행해야 한다는 것은 알겠습니다. 그러면 한 회전마다 어떤 일이 일어나면 좋을까요? 팬 케이크가 이런 식으로 쌓여 있다고 생각해 봅시다. '위에서 k개를 뒤집는다'는 연산 특성상, k가 n이 아니라면, 맨 아랫쪽에 있는 것은 움직이지 않습..
call by value, 즉 값 복사 호출 방식은 반드시 알고 넘어가셔야 하는 개념 중 하나입니다. 이것은 간단하게 말해서, 함수에 값이 전달이 될 때, 값이 copy 되어서 전달이 된다는 겁니다. 즉, 사본이 전달이 되는 셈입니다. 다음 프로그램을 보면서 간단하게 이해를 해 보도록 하겠습니다. 라인 바이 라인으로 끊어서 이해를 해 보도록 하겠습니다. 먼저, 5번째 줄과 6번째 줄에 a가 선언이 되고, b가 선언됩니다. 이 때, a에는 5가, b에는 3이 들어갑니다. 그러면 이 상황입니다. 그 다음에 swap 함수가 호출이 되는데요. 이 때, a와 b의 값을 넘겨줍니다. 이 때, 메모리 상황을 그려보면 위와 같습니다. 다음에, 12번째 줄에 t가 선언이 되었는데요. swap 내에서 선언이 되었기 때문에..
C언어에서 2차원 배열은, 어떻게 메모리 상에 저장이 될까요? 오늘은 이 부분만 집중적으로 보도록 하겠습니다. 먼저, int형 배열인, arr[3][4]를 선언하였습니다. 그러면 메모리 상에 어떻게 생성이 될까요? 일단 행렬로 치면, 3행 4열이라고 볼 수는 있는데요. & 연산자를 쓰면, 현재 주솟값을 볼 수 있는데요. 예제 프로그램을 보면서 이해를 해 보도록 합시다. 먼저, 예제 1을 봅시다. 3행 4열의 배열을 선언하였습니다. 그리고 2중 for loop를 돌면서, 저는 i와 j와 arr[i][j]의 주솟값을 출력하고 있습니다. 그러면 어떻게 결과가 나올까요? 위와 같이 나오는데요. arr[0][0], arr[0][1], arr[0][2], arr[0][3], arr[1][0], ... 순으로 주솟값..
Hash에서, 면접에서 물어볼 만한 키워드들을 천천히 알아보도록 하겠습니다. 이 중 오늘은 재해싱에 대한 이야기를 간단하게 하고 넘어가겠습니다. Hash Table은, 저번시간에 배운 바로는, 버킷에다가, 데이터를 주렁 주렁 매달아 놓는 식으로 많이 처리를 한다고 했었습니다. 보통, Chaining을 사용하는 경우, List를 사용한다고 했었습니다. 저는 간단하게 구현하기 위해서, 2차원 배열로 구현을 했었고요. 그런데, 생각을 해 봅시다. 수가 2개만 들어왔어요. 그런데, 1000만개의 바구니를 미리 만들어 놓을 필요가 있을까요? 2개를 위해서, 1000만개의 바구니를 생성한다. 이것만큼 낭비가 없습니다. 그러면, 어떻게 할 거냐. 초기 사이즈를 매우 작게 잡습니다. 예를 들자면, 2개의 초기 buck..
최근댓글