vector란? vector는 C++ 표준 라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 손쉽게 사용하기 위해 정의된 class입니다. vector의 가장 큰 장점은 동적으로 원소를 추가할 수 있으며 크기가 자동으로 늘어난다는 점입니다. 쉽게 말해 크기가 가변적으로 변하는 배열이라고 할 수 있습니다. 속도적인 측면에서는 배열에 비해 떨어지지만 메모리를 효율적으로 관리할 수 있다는 장점이 있어 굉장히 많이 사용합니다. vector는 배열과 마찬가지로 원소들이 하나의 메모리 블록에 연속하게 저장됩니다. 그렇기에 원소가 추가되거나 삽입될 때 메모리 재할당이 발생할 수 있고 상당한 부하가 발생하게 된다는 점은 단점으로 꼽히고 있습니다. vector 구조 vector를 생성..
정렬이 필요할때마다 직접 만들어서 사용할수도 있겠지만 매번 만들어서 사용하기는 번거롭습니다. 간편하게 정렬을 하고 싶다면 직접구현보다는 헤더를 include하여 그 안에 있는 sort()함수를 사용하시면 간편하게 정렬을 할 수 있습니다. sort() 함수는 C++ STL에서 제공하는 함수로써 각종 알고리즘 문제를 풀 때도 활용할 수 있어 자주 쓰이는데, 이 함수의 시간 복잡도는 nlogn입니다. 이 함수는 intro sort라는 정렬 방식을 바탕으로 구현되어 있는데 이 방식은 quick sort를 기반으로 heap sort와 insertion sort를 섞은 방식으로 최악의 경우 n^2의 시간 복잡도를 가지는 quick sort와는 달리, 최악의 경우에도 nlogn을 보장하는 정렬 알고리즘입니다. 배열의..
두 개의 문자열이 같은지 비교하고 싶다면 strcmp, strncmp함수를 사용하면 됩니다. strcmp함수는 비교대상 문자열인 string1 string2이 같은지 비교합니다. strncmp는 문자열을 비교한다는 것에서 일정 길이만큼 비교할 수 있는 옵션이 추가된 함수입니다. 위의 두 함수는 널로 끝나는 스트링에서 작동합니다. 그렇기에 함수에 대한 스트링 인수는 스트링 끝을 나타내는 널 문자(\0)를 포함해야 합니다. strcmp() : 두 문자열이 같으면 0을, 같지 않으면 0이 아닌 값을 반환합니다. strncmp() : 두 문자열의 원하는 길이만큼 같으면 0을, 같지 않으면 0이 아닌 값을 반환합니다. 두 함수의 리턴값은 비교 대상의 어떤 문자열이 더 크냐에 따라 달라지게 되는데 문자열의 크기는 ..
strcat와 strncat 함수는 두 문자열을 이어 붙여주는 기능을 합니다. 첫 번째 주소에 저장된 문자열에 두 번째 주소에 저장된 문자열을 붙여서 반환합니다. 두 함수는 문자열을 이어 붙인다는 형태는 동일하며 strncat는 일정 길이만큼 추가할 수 있는 옵션이 추가된 함수입니다. 위의 두 함수는 널로 끝나는 스트링에서 작동합니다. 그렇기에 함수에 대한 스트링 인수는 스트링 끝을 나타내는 널 문자(\0)를 포함해야 합니다. strcat() :문자열A에 원하는 문자열B를 문자열A 뒤쪽에 이어 붙이는 함수 strncat() :문자열A에 원하는 문자열B의 n개를 문자열A 뒤쪽에 이어 붙이는 함수 strcat(s2, s1)과 같이 strcat 함수에 최종 결과가 나올 문자열과 붙일 문자열을 넣습니다. 위의 ..
C언어 혹은 C++에서 자신이 원하는 문자열을 잘라낼 때 사용하는 함수로 strtok라는 함수가 있습니다. 이 함수는 string token의 약자로 인자 값으로 전달받은 매개변수를 구분자로 하여 문자열을 잘라내어 return 합니다. 만약 더 이상 자를 문자열이 없다면 NULL을 반환합니다. 문자열을 자르는 방식 M Y N A M E I S T O M \0 M Y \0 N A M E I S T O M \0 M Y \0 N A M E \0 I S T O M \0 M Y \0 N A M E \0 I S \0 T O M \0 C언어 또는 C++에서 문자열은 \0으로 종료가 되게 되어있습니다. 그렇기에 인자로 받은 문자열에서 구분자가 있는 위치를 널 포인트로 치환해줌으로써, 문자열을 끊기게 만듭니다. 예를 들..
C언어에서 문자열을 복사하고 싶다면 strcpy이나 strncpy함수를 사용하시면 됩니다. 두 함수의 차이는 복사할 문자열의 길이를 설정하느냐만 다를 뿐 기본적으로 문자열을 복사한다는 것은 같습니다. strcpy() : 대상 문자열 전체를 복사한다. strncpy() : 대상 문자열을 일정 길이만큼 복사한다. strcpy, strncpy 함수 형식 char* strcpy(char * dest, const char* src); char* strncpy(char* dest, const char* src, size_t num); dest : 복사를 받을 대상의 시작 주소 src : 복사를 할 원본의 시작 주소 num : 복사를 할 문자의 개수 ※ size_t는 해당 시스템에서 어떤 객체나 값이 포함할 수 있는..
strlen은 의 헤더 파일 안에 있는 함수로써(c++일 경우 cstring) const char* 타입의 문자열을 받아서 해당 문자열의 길이를 반환하는 함수입니다. 여기서 문자열의 길이라고 하는 것은 문자열을 구성하는 문자의 개수를 의미하며 문자열 마지막에 붙어 있는 종료 NULL문자인 \0을 제외한 문자 개수입니다. (공백 포함) 위와 같이 10의 크기를 가진 배열안에 있는 Hello라는 문자열은 5의 길이를 리턴하게 됩니다. strlen 함수 형식 size_t strlen(const char *str); 인자값 : const char* 타입의 문자열 리턴값 : 문자열의 길이(양수) ※ size_t는 해당 시스템에서 어떤 객체나 값이 포함할 수 있는 최대 크기의 데이터를 표현하는 타입으로 반드시 un..
문자열을 입력받을 때 gets, puts 함수는 문자열 입출력 함수입니다. gets는 문자열을 입력받고 puts는 문자열을 출력할 때 쓰이는 함수입니다. 특히 gets나 puts를 사용하면 Enter단위로 문자열을 입력받기때문에 한줄씩 입력받을 수 있습니다. gets 함수 사용법 gets(str); str : 입력받을 문자형 배열 gets는 문자열을 입력을 받는 함수입니다. 문자열만 입력받을 수 있고, 개행을 기준으로 입력받습니다. 작동방식은 사용자로부터 문자열을 입력받아 함수의 인자로 명시한 주소의 메모리에 저장한 뒤 입출력 버퍼가 비어있는지 확인하고 비어있다면 문자 혹은 문자열을 입력받아 입출력 버퍼에 저장합니다. ※ 최근에는 gets대신에 gets_s를 사용하라고 권장하는 추세입니다. gets는 버..
문자열을 scanf()함수로 입력을 받게 된다면 공백도 하나의 문자로 인식하여 같이 입력을 받게 됩니다. 입력시 공백(space)를 무시하고 싶다면 " %c" 이런식으로 한글자를 띄워서 명시해주셔야 합니다. scanf 함수 char형 문자 입력 시 공백 무시하기 #include int main() { //배열 char arr[10]; //입력 //입력값 a b c d e f g h i j for(int i=0;i
scanf()는 기본적으로 공백(space)이나 개행(enter)을 기준으로 입력을 받기에 공백이나 개행 없이 한 줄로 쭉 입력을 한다면 입력이 정상적으로 이루어지지 않습니다. 하지만 scanf("%1d",&temp)와 같이 %1d를 사용하면 붙어있어도 한 번에 한 개씩 입력받을 수 있습니다. scanf 함수 정수 한글자씩 입력받기 #include int main() { //배열 int arr[10]; //입력 //입력값 : 0123456789 for(int i=0;i
2020년 8월 24일 총 8주간의 알고리즘 잡스의 몰입캠프가 종료되었다. 두달이라는 짧은시간 동안 내 나름대로 유의미한 성장을 이루었다고 생각된다. 예전에는 엄두도 못내는 문제들도 어떻게 접근해야 하는지 알게되었고 풀 수 있게 되었다. 물론 지금 내 실력으로 명문높은 기업들의 코딩테스트에 단번에 합격할 수 있다 장담은 못하지만 나는 애초부터 알고리즘 잡스를 수강할때 기업의 코딩테스트에 통과하자라기보다는 그냥 순수하게 알고리즘 자체를 잘 하고 싶어 수강을 한 케이스기 때문에 나의 초기 목적은 완벽하게 이루었다고 생각한다. 8주라는 시간동안 확실히 혼자하는것보다는 높은 성과를 얻어낸것 같다. ※ 혹시나 이 글을 보고 알고리즘 잡스의 몰입캠프의 수강을 고민하고 있는 사람이 있다면 추천하고 싶다. 1. 알고리..
금일 특강의 주제는 이때까지 진행했었던 알고리즘 문제를 같이 풀어보는것이 아닌 면접 스킬에 대한 강의였다. 알고리즘 잡스 대표님께서 삼성에서 면접관으로 수행하셨던 경험이 있으셔서 면접관으로 있었던 썰 듣는게 재미있었다. 면접의 포인트 3가지 기업의 인재상 1. 열정 2. 창의혁신 3. 인간미, 도덕성 기업의 규모가 크면 클 수록 기업의 인재상에 대해 매우 구체화 하고 회사의 임직원들에게 해당 기업의 인재상을 적절하게 주입시키려고 노력한다. 예를들어 삼성의 인재상은 위와 같은데 어떠한 인재를 뽑아야 할것인가를 기준으로 하고 뽑기에 기업의 인재상과 나를 일치시키려고 노력하자 2. 자기소개와 마지막으로 하고 싶은 말 신입일 경우 패기있고 열정적인 말투가 필요 마지막으로 하고싶은말이 없다 -> 열정이 없어보임 ..
지금까지 배운 내용들을 복습한다는 생각으로 단계별로 못 풀고 지나쳤던 문제들을 다 풀어나가고 있다. 이 문제들을 처음 접할 때는 어렵다고 느꼈었는데 지금 다시 풀어보니 가볍게 풀리는 문제들이 많아서 자신감이 생긴다. 알고리즘 잡스를 시작하고 나서 실력이 많이 향상되었음을 느낀다. 예전에는 어떻게 풀어야 할지 감이 잡히지 않는 문제들도 어떻게 해결해야 하는지 알게 되었으며 문제도 풀어나가고 있다. 새로운 과정 추가 학습과정이라는 새로운 과정이 개설되었다. 일단 내 계획은 지금까지 못 풀었던 문제들을 전부 다 Clear하고 추가 학습과정으로 넘어가는 것을 목표로 하고 있다. 요즘은 특별한 일 없이 계속 알고리즘 문제만 풀고 매주 목요일 시험치고 이 패턴을 계속 반복하고 있어 포스팅할 내용이 딱히 없다. 알고..