일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 포르투갈 여행
- pipex 42
- 서울42
- 에꼴42
- 지베르니 계절 추천
- 이지젯
- str함수
- so_long
- get next line
- 42 so_long
- gnl
- 와인선별방법
- 파리 피크닉
- libft
- 지베르니 가을
- ft_printf
- 42 pipex
- push swap
- 알고리즘 기초
- get_next_line
- 와인 고르기
- 42 libft
- printf
- 지베르니 여름
- pipex
- push swap 설명
- ecole42
- 굿노트 스티커
- 지베르니
- 42
- Today
- Total
목록좌뇌/왕초보의 컴퓨터 언어 세계 (9)
뇌 마음 반반저장소
시작하기 전에 이전 포스팅을 먼저 보고 오시는 것을 추천드립니다. (●'◡'●) 왕초보의 알고리즘 정렬 종류 파헤치기 1 (자료구조, 시간 공간 복잡도) 왕초보의 알고리즘 정렬 종류 파헤치기 2 (버블정렬, 삽입정렬, 선택정렬 / 코드 예제 C) 4. 병합정렬 (Merge sort) 지금부터 정말 흥미로운 함수들이 나온다. 합병 정렬 또는 병합 정렬(영어: merge sort 머지 소트[*])은 O(n log n) 비교 기반 정렬 알고리즘이다. 일반적인 방법으로 구현했을 때 이 정렬은 안정 정렬에 속하며, 분할 정복 알고리즘의 하나이다. 존 폰 노이만이 1945년에 개발했다. [1] 상향식 합병 정렬에 대한 자세한 설명과 분석은 1948년 초 헤르만 골드스타인과 폰 노이만의 보고서에 등장하였다. [2] ..
시작하기 전에 이전 포스팅을 먼저 보고 오시는 것을 추천드립니다. 왕초보의 알고리즘 정렬 종류 파헤치기 1 (자료구조, 시간 공간 복잡도) 정렬들의 예제를 만들어보자. Push swap처럼 숫자의 크기 대로 정렬하는 것을 예로 들어 만들어 보겠다. 1. 버블정렬 (Bubble Sort) 버블 정렬 또는 거품 정렬(-整列, 영어: bubble sort 버블 소트[*], sinking sort 싱킹 소트[*])은 정렬 알고리즘 중 하나이다. 시간 복잡도가 O(n²)으로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다. 이를 양방향으로 번갈아 수행하면 칵테일 정렬이 된다. 버블정렬은 두개의 크기를 비교하고 바꿔주면서 반..
학교에서 push swap을 하는 친구들이 과제를 수행하는 것을 보니 각자 다른 알고리즘 종류를 사용하고 있었고, 어떤 친구는 초반에 잘못된 알고리즘을 골랐다며 땅을 치며 후회하는 모습을 보기도 했다. 내 성격상 프로젝트를 진행하기에 앞서서 알고리즘 종류를 모두 알아보고 선택해 보겠다. 알고리즘이란 단어를 들으면 괜히 어렵고 박사님들만 할 수 있을 것 같은 느낌이 든다. 알고리즘은 AI를 다룰 때 많이 나온다고 생각했는데, 이번에 공부를 하면서 의외로 간결하고 깔끔한 설명들에 무거웠던 마음(?)이 한시름 놔졌다. 나는 push swap을 하기 전에 알고리즘 공부를 하고 싶어서 한국에 갔을 때 이란 책을 샀다. 인터넷의 여러 자료들과 이 책을 참고해서 블로그를 작성해 본다. 알고리즘이란? 일단 알고리즘의 ..
자료구조는 컴퓨터의 세계에서 효율적인 데이터의 접근 및 수정을 가능하게 하는 자료의 조직, 관리, 저장을 의미한다. 더 정확히 말해서, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다. 간단하게 말한다면, 여러 데이터들의 묶음을 저장하고, 사용하는 방법을 정의한 것이다. 신중히 선택한 자료구조는 보다 효율적인 알고리즘을 사용할 수 있게 해주기 때문에 이 파트도 그냥 넘어갈 수 없다! 자료(Data)란? 그렇다면 데이터는 무엇일까? 말 그대로 우리가 입력할 수 있는 모든 값이다. 주소를 예로 들어보자. 파리의 유명한 백화점을 예로 들어보겠다. 파리에 위치한 유명한 백화점 "갤러리 라파예트 오스만"의 경도와 위도는 48.873507, 2.3325..
memory leak을 찾는 프로그램 Valgrind를 친구들이 많이 쓰는 것을 보았다. 일단 설치하자. $ sudo apt-get install valgrind 설치 후 프로그램을 실행할 때 앞에 valgrind 만 붙여주면 된다. 일부러 free를 하지 않고 코드 하나를 만들어 봤다. #include #include void main() { char *str; str = malloc(sizeof(char) * 10); str = "Valgrind test!"; printf("%s\n", str); } free가 없는 malloc 함수를 하나 만들었다. $ gcc valgrind_test.c $ ./a.out Valgrind test! 실행은 잘 되지만 valgrind를 사용해서 프로그램을 돌려보면, ..
자꾸 찾아보게 되서 따로 포스트로 빼서 만들었다. 질문의 시작이었던 원본은 아래의 포스트에. 👇 [42_libft] Part 1 (str 함수들1 strlen, strchr, strrchr, strncmp) *흥미로운 점 : const char을 사용하는 이유는? 우리는 문자열을 건들지 않고 그냥 읽는 용으로 가져와서 숫자만 셀 것이기 때문이다. 그래서 우리의 데이터는 상수, 즉 const가 저장되는 곳인 데이터 영역에 쓰이면서 우리는 수정하거나 변경할 수 없다. const는 별이 어디에 붙느냐에 따라서 다른 의미를 가진다. const char *s; char const *s; char * const s; const char * const s; char const * const s; const char ..
위의 함수를 살펴보다가 void함수가 return값을 포함하고 있는 것을 보았다. 그래서 어떻게 void함수가 return값을 줄 수 있는지 궁금해서 찾아봤다. 그냥 void는 아얘 텅 빈 값이다. 그래서 libft의 fd 함수들을 만들 때 print를 목적으로 루프를 돌려주고 리턴값이 없는 함수를 아래와 같이 만들었다. 때때로 이렇게 리턴이 필요 없는 간단하고 깔끔한 함수들이 필요하다. void ft_putchar_fd(char c, int fd) { write(fd, &c, 1); } 하지만! void에 포인터를 붙여 준다면 어떻게 될까? 포인터는 자리를 맡아주기 때문에 void*라도 자동적으로 8바이트의 주소를 위한 공간을 설정해 준다. void의 타입 자체도 텅 비어 있기 때문에 아무 타입이나 넣..
argc, argc는 개발자들이 테스트를 위해서 디버깅하기 위해서 쓴다고 한다..! (피신 때 친구들이 이거 꼭 곡 부하고 시험보라그래서 미리 찾아보고 살았던 기억이 있었더랬죠..) 1. 기초부터 살펴보기 그럼 이 함수의 원형을 한번 살펴보자. intmain(int argc, char **argv) //1번 intmain(int argc, char *argv[]) intmain(int ar, char **av) //2번 메인은 함수를 반환해주는 형이다. main 앞에 붙은 int는 "이 함수에서 반환되는 리턴 값은 int로 나올 거예요~ "라는 뜻이다. 일반적으로 return (0); 이렇게 마무리를 하는데 그 말인즉슨 "0이면 정상적으로 끝났어요(참)!" 다른 숫자가 나오면 "정상이 아니에요!(거짓)"..
작문을 하면서 다른 친구들이 당연하게 생각하는 단어(?), 용어 혹은 구조에 대해서 모르고 있었을 때가 많았다.. (역시나 베이스란 없는 나란 베이비) 그래서 이 페이지에는 누군가 당연하게 알아야 한다고 생각했던 것들을, 내가 몰랐을 때마다 파서 업데이트해보고자 한다. 자, 그럼 본론으로 들어가서, 위의 제목을 크게 두개의 카테고리로 나눌 수 있다. NULL : 포인터 주소를 초기화해준다. 0! NUL : 문자열의 끝을 알려준다. \0! 참고로 Nil은 C언어에서 사용되지 않는다고 한다! 그럼 아래에서 Null과 Nul을 자세히 살펴볼까? 1. NULL : 포인터 주소를 초기화 해준다. 0! 일단 널의 정의를 찾아보자. Null (nil dans certains languages) est une vale..