전체 글

쓰다보면 내 머리에도 언젠가 들어오겠지.. 를 지향합니다.
🗯읽게된 계기 이번 중간고사 공부 시절.. 갑자기 진로를 바꾸고 싶다고 생각했다. 왜냐면 프로그래밍은 나랑 안 맞다고 생각했기 때문이다. 분명 노력의 부족이겠지만 그 이유를 외부로 돌리기 시작했다. 애증의 관계인 코딩을 더 잘하게 하기 위해 이 매혹적인 책을 집어들었다. 👀인상 깊었던 부분 - 스터디를 하는 이유는 지식 습득이 아니다. 가장 큰 이유는 다양한 경력과 연령대의 사람들이 만나 다양한 관점을 가지고 토론할 수 있기 때문이다. (p.79) 또 다른 이유는 내가 도전하고 싶은 일들을 마음껏 도전하고 시도해 볼 수 있는 곳이기 때문이다. (p.80) - 우리가 진정 고민해야 할 것은 "어떻게 하면 일을 하지 않을 것인가가 아니라 일을 어떻게 할 것인가?여야 한다. "어떻게 일을 하는 것이 나의 자아..
스택이란? 택배 더미처럼 쌓여있는 자료구조의 형태 입출력형태 LIFO(Last-In First-Out). 즉, 후입선출로 이루어진다. 구성 요소 - 스택 상단 (stack top) - 스택 하단 (stack bottom) - 요소 (element) 기본 연산 - Push 연산 - Pop 연산 예제 정수 배열 스택 프로그램을 스택을 이용해서 짜보도록 하겠다. #include #include #define MAX_STACK_SIZE 100 typedef int element; element stack[MAX_STACK_SIZE]; int top = -1; int is_empty() { return (top==-1); } int is_full() { return (top == (MAX_STACK_SIZE - ..
사용해야 하는 이유 메모리 부족 또는 메모리 낭비를 방지하기 위하여 동적 메모리 할당을 사용한다. 동적 메모리는 어디에 저장되나요? 히프(heap)라는 공간에 메모리가 할당된다. 히프는 운영체제가 사용되지 않는 메모리 공간을 모아둔 곳이다. 필요할 때마다 빌려 사용한 뒤 반납하기 때문에 유용하다. 어떻게 할당하나요? int *p; p = (int *)malloc(sizeof(int)); *p = 1000; free(p) 단계 1. 동적 메모리 할당 2. 동적 메모리 사용 3. 동적 메모리 반납 구조체 동적으로 생성하기 #include #include #include typedef struct studentTag { char name[10]; int age; double gpa; } student; int..
구조체를 배우고 나면 본격적으로 자료구조 공부 시작이다. 함께 알아보자. 구조체? 타입이 다른 데이터를 묶어서 표현하는 방식. 구조체 형식 struct 구조체이름 { 항목1; 항목2; ... }; 예시 struct studentTag { char name[10]; int age; double gpa; }; 구조체 선언 방식 struct 구조체이름 구조체 변수; 예시 struct studentTag s; 구조체 멤버 설정 strcpy(s.name, "kim") s.age = 20; s.gpa = 4.3; 또 다른 방법 #include typedef struct studentTag { char name[10]; int age; double gpa; } student; int main(void) { stude..
효율성 체크를 위해 해당 코드가 돌아가는 시간을 측정해야 합니다.그럴 때 어떻게 체크해야 할까요? 코드에 아래 문장을 추가하면 됩니다. 첫 번째 방법. #include start = clock(); ... stop = clock(); double duration = (double)(stop-start)/CLOCKS_PER_SEC; 호출 프로세스에 의하여 사용된 CPU 시간을 계산하는 방식. 두 번째 방법. #include start = time(NULL); ... stop = time(NULL); double duration = (double)difftime(stop, start); 초 단위로 측정되 시간을 반환하는 time() 함수를 사용하여 수행시간을 측정한다. 출처 : C언어로 쉽게 풀어쓴 자료구조
알고리즘을 공부하다 보면 코드의 복잡도를 계산하게 된다. 크게 알고리즘의 수행시간 분석은 2가지 (시간 복잡도, 공간 복잡도)로 분류된다. 그리고 시간 복잡도 함수를 파악할 때 나오는 것이 있다. 바로 '빅오 표기법'이다. 빅오 표기법이란? 시간 복잡도 함수에서 불필요한 정보를 제거하여 알고리즘 분석을 쉽게 할 목적으로 시간 복잡도를 표시하는 방법. 어떻게 표기하나요? 알고리즘 A의 시간복잡도가 O(n) [빅오 of n]라고 한다. - 시간 복잡도 함수의 증가에 별로 기여하지 못하는 항을 생략한다. 1. f(n)=5 -> O(1) 2. f(n)=2n+1 -> O(n) 3. f(n)=3n^2 + 100 -> O(n^2) 4. f(n)=5*2^n + 10*n^2 + 100 -> O(2^n) 많이 쓰이는 빅오..
1. 한글이나 영어 같은 자연어 - 모호성이 존재한다. -> 명령어 단어를 명백하게 정의해야 한다. //대략적으로 적었습니다. 배열 list의 첫번째 값을 largest 변수로 지정한다. 변수 i를 지정한다. i를 배열 list의 인덱스로 사용하여 largest보다 큰 값이 있다면 해당 값을 largest로 지정한다. 배열의 크기만큼 i를 증가시킨다. largest의 값을 출력한다. 2. 흐름도(Flow Chart) - 알고리즘이 복잡할 수록 구현 어려움. 3. 의사 코드(Pseudo Core) ArrayMax(list, N): largestt
그 무엇도 이 세상에는 쉬운 것이 없습니다. 그럴 때마다 나에게 용기를 주는 자극제가 있다면 더 길게 그 일을 할 수 있을 것 같습니다. 더 오래 개발자를 하고 싶은 마음에 개발자 명언을 모아서 공유하고자 합니다. 명언을 발견할 때마다 추가하도록 하겠습니다. 코드 수를 기준으로 프로그램의 진도를 측정하는 것은 비행기 제작 진도를 무게로 측정하는 것과 같다. Measuring programming progress by lines of code is like measuting aircraft builing progress by weight. - 빌 게이츠 Bill Gates -
평범한컴과생
개발자하고싶은컴공생