📊 분류 전체보기 277

전화번호부 v1.0

오늘은 권오흠 교수님께서 전화번호부를 만드는 예제를 가르쳐주셨다. 여태까지 배웠던 C언어의 기초를 응용해서 전화번호부 예제를 만들 수 있었다. void add() { char buf1[BUFFER_SIZE], buf2[BUFFER_SIZE]; scanf("%s", buf1); scanf("%s", buf2); names[n] = strdup(buf1); // strdup 와 strcpy 차이는? numbers[n] = strdup(buf2); n++; printf("%s was added successfully.\n", buf1); } buf1 과 buf2 는 지역변수이기 때문에 lifetime 은 짧다. 그러므로 이 함수를 벗어나게 되면 두 변수 모두 소멸하게 된다. 그래서 strdup 를 써주어야 하..

💡 자료구조 2021.06.19

26. 말아톤

이 문제의 저작권은 인프런 강의 "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 에 있습니다. 문제 25 KSEA 장거리 달리기 대회가 진행되어 모든 선수가 반환점을 넘었다. 각 선수의 입장에서 자 기보다 앞에 달리고 있는 선수들 중 평소 실력이 자기보다 좋은 선수를 남은 거리 동안 앞지 르는 것은 불가능하다. 반대로, 평소 실력이 자기보다 좋지 않은 선수가 앞에 달리고 있으면 남은 거리 동안 앞지르는 것이 가능하다. 이러한 가정 하에서 각 선수는 자신이 앞으로 얻을 수 있는 최선의 등수를 알 수 있다. 각 선수의 평소 실력은 정수로 주어지는데 더 큰 값이 더 좋은 실력을 의미한다. 현재 달리고 있는 선수를 앞에서 부터 표시했을 때 평소 실력이 각각 2, 8, 10, 7..

문자열 예제

#include int main() { char buffer[40]; while (1) { printf("$ "); scanf("%s", buffer); printf("%s: %d\n", buffer, strlen(buffer)); } return 0; } 이 코드의 문제점은 scanf("%s", buffer) 부분에서 발생하는데, scanf("%s", ...) 는 공백을 기준으로 다른 단어로 인식한다. 그래서 gets() 라는 함수를 떠올려볼 수 있으나 gets() 함수는 안전하지 않다. 안전하지 않다는 것이 무슨 의미냐하면 buffer 길이를 40으로 제한했음에도 불구하고 40을 넘는 길이의 문자열을 입력했을 때, 그대로 실행이 되면서 40이 넘는 길이를 카운트해주기 때문이다. -> gets() 함수..

💡 자료구조 2021.06.18

시간 복잡도와 빅-오 표기법

"어떤 알고리즘이 어떠한 상황에서 더 빠르고 느리냐?" "어떤 알고리즘이 어떠한 상황에서 메모리를 적게 쓰고 또 많이 쓰냐?" 하나는 '속도'에 관한 것이고, 다른 하나는 '메모리의 사용량'에 관한 것이다. 이것을 수행하는 시간 분석 결과를 가리켜 앞에 것은 '시간 복잡도'라 하고, 뒤에 것은 '공간 복잡도'라 한다. 어떻게 속도를 평가할까? ① 연산의 횟수를 셉니다 ② 그리고 처리해야 할 데이터의 수 n에 대한 연산횟수의 함수 T(n) 을 구성합니다 연산의 횟수가 적어야 빠른 알고리즘이고, ②의 의미는 데이터의 수를 함수에 입력하면 연산의 횟수가 바로 계산이 되는 식을 구성한다는 뜻이다. 그 식은 책에 그림이 있는데 지수나 로그함수 식의 형태 같은 것들이다. 데이터 수의 변화에 따른 연산횟수의 변화 정..

💡 자료구조 2021.06.17

스터디 1일차

1강 sorting의 종류 - heap sort, quick sort, merse sort stable한 알고리즘은 merge sort이 있고, unstable한 알고리즘은 quick sort, heap sort가 있다. (퀵힙은 불안정) ABC 로 테이블이 있을 때, 정렬한 후에도 ABC 이 순서로 유지된다면 stable 알고리즘이다. (잘못 이해했음. 아래에 부가 설명 참고!) search는 배열을 전부 다 돌아야 하기 때문에 O(n) 정도로 걸린다 binary search -> O(logn) 2차원 다차원 array.. 먼저 정렬 알고리즘이란 컴퓨터 과학과 수학에서 정렬 알고리즘(sorting algorithm)이란 원소들을 번호순이나 사전 순서와 같이 일정한 순서대로 열거하는 알고리즘이다. (출처..

문자열

char str[6]; str[0] = 'h'; str[1] = 'e'; str[2] = 'l'; str[3] = 'l'; str[4] = 'o'; str[5] = '/0' /* C언어는 문자열을 생성하는 편리한 방법을 제공 - 2가지 */ char str[] = "hello"; //혹은 char *str = "hello"; null character('\0')는 문자열의 끝을 표시하는 역할을 한다. 즉, 배열의 크기가 문자열의 길이보다 적어도 1만큼 길어야 한다. 하지만 C언어는 배열의 각 칸마다 문자 하나씩 저장되는 방법말고도 문자열을 생성하는 편리한 방법을 제공해주는데 바로, 겹따옴표(" ")를 사용하는 방법이다. char str[] = "hello"; ------① char *str = "hell..

💡 자료구조 2021.06.16

동적할당 malloc 함수

int *p; p = (int *)malloc(40); if ( p == NULL) { /* 동적 메모리 할당이 실패 */ /* 적절한 조치를 취한다. */ } p[0] = 12; p[1] = 24; *(p+2) = 36; malloc이 반환하는 주소는 원래 타입이 없는 주소(void *)이다. 정수들을 저장하기 위해서 이것을 int *로 변환한다. (반드시 필요한 건 아니다.) 할당 받을 메모리의 크기를 byte단위로 지정한다. 여기서는 10개의 정수를 저장하기 위해서 40바이트를 요청하였다. malloc으로 할당받은 메모리는 이렇게 보통의 배열처럼 사용한다. 첫번째 주소를 리턴해준다. 만약 주소를 잊어버리면 찾기 힘들기 때문에 malloc이 리턴해주는 주소를 보관할 저장소가 필요하다. 그래서 어떤 변..

💡 자료구조 2021.06.16

Binary Search vs Linear Search

정말 노마드 코더님은 비전공자들에게 한줄기 빛과 같다.... 그동안 정보처리기사, Sqld 등등.. 자주 나오는 개념인 이진 탐색(Binary Search)!! 자격증 따면서 글로만 읽었을 때에는 이게 왜 중요한지 이해가 안갔었는데 오늘 영상을 보니 이해가 한방에 되었고 정말 중요한 알고리즘이라는 것을 느꼈다. 오늘도 역시 노마드 코더님의 강의를 보고 블로그 글을 포스팅함으로써 개념을 정리해보려고 한다. 노마드 코더 강의 출처: https://www.youtube.com/watch?v=WjIlVlmmNqs 오늘은 왜 알고리즘이 중요한지 배우기 위해서 같은 작업을 수행하는 알고리즘 2개를 비교해보겠다. 배열 안에 있는 숫자를 어떻게 찾을 수 있을지는 여러 알고리즘이 있는데 어떤 알고리즘을 선택하는지에 따라..

💡 자료구조 2021.06.14

함수의 인자에 대해 알아보기(배열과 포인터)

#include int main(void) { int sum, i, average; int num[10]; for (i = 0; i < 10; i++) scanf("%d", &num[i]); sum = calculate_sum(num); average = sum / 10; printf("%d\n", average); return 0; } int calculate_sum(int array[]) { int sum, i; sum = 0; for (i = 0; i < 10; i++) sum = sum + array[i]; return sum; } main() 안에 있는 sum = calculate_sum(num) 에서 num은 10의 길이를 가지는 배열이다. 배열의 이름은 첫번째 요소의 주소와 같다는 사실은 다..

💡 자료구조 2021.06.10