Development/CS7 [CS50] 6강 자료구조 하버드 cs50 강의의 최종장 강의의 시작은 malloc과 포인터에 대한 복습으로 시작하고, malloc으로 선언한 배열의 크기를 조정할 수 있는 realloc 사용하는 방법을 배운다. // tmp라는 포인터에 기존에 정의한 list 배열에 // int크기(4byte) 5개의 메모리주소를 재 정의후 기존 배열 값들을 복사한다. int *tmp = realloc(list, 5*sizeof(int)); 연결 리스트 일반적으로 자료 구조란 C나 C++, 자바, 파이썬에 있는 프로그래밍 구조일 뿐이다. 컴퓨터 메모리에 정보를 각기 다른 방법으로 저장할 수 있도록 해준다. 배열에서는 각 인덱스의 값이 메모리상에 나란히 붙어서 저장되어 있다. 그래서 중간중간 데이터를 추가하려 할 때 realloc으로 배열의 길이를.. 2021. 12. 28. [CS50] 5강 메모리 메모리 주소 컴퓨터는 숫자를 10진수나 2진수가 아닌 16진수로 표기할 때가 많다. 컴퓨터에서 데이터를 처리하기 위해 16진수를 사용할 때 장점이 있기 때문이다. 이미지를 표현할 때 RGB형태로 데이터를 갖고 있는데 css를 다룰 때 한 번쯤은 봤을 #FFFFFF 문자열이다. 이것이 의미하는것이 16진수들인데 R : G : B = FF : FF : FF 인 것이다. 컴퓨터는 8개 비트가 모인 바이트 단위로 정보를 표현한다. 2개의 16진수는 1byte의 2진수로 변환되기 때문에 정보를 표현하기 매우 유용하다. 앞서 16진수를 말한 이유는 메모리의 주소는 16진수로 표현한다. 메모리에 수많은 주소를 표현하기에 아주 적절한 단위일 것이다. 포인터 C에서 포인터를 사용할 때는 아래처럼 변수명 앞에 ' * '를.. 2021. 12. 23. [CS50] 제 4강 알고리즘 강의에서는 알고리즘을 배우면서 중요한 것은 알고리즘의 흐름, 개념을 잘 얻어가는 것이라고 한다. 강의는 경험인 것이고 익힘은 계속 적용해 나가면서 익히는 것이다. 검색 알고리즘 메모리를 바이트의 격자 배열로 취급하면 우리가 원하는 대로 사용할 수 있다. 서랍을 열어서 원하는 물건을 찾는다고 한다면 우리는 서랍을 한 번에 하나씩 열어가면서 찾을 것이다. 정렬되어있는 것을 알지 못하기 때문에 서랍을 한 개씩 여는 방법을 사용한다. - 선형 검색 혹은 정렬되어있는 것을 알고 있다면 반 씩 쪼개서 찾아가는 방법을 사용할 수 있다. - 이진 검색 이진 검색은 처음에 강의에서 알려준 전화번호부에서 이름 찾는 방식과 동일한 방법이다. 검색해야 하는 조건을 반씩 줄일 수 있기 때문에 선형 검색보다 높은 효율을 낼 수 .. 2021. 12. 20. [CS50] 제 3-2강 배열 이전 3-1에서는 배열이 어떤 역할을 하게 맡게 될지 알게 되었다면 3-2강에서는 직접 배열을 배워본다. 문자열과 배열 자료형들은 각각 할당된 메모리를 갖고 있다. 하드웨어적으로 메모리를 쉽게 얘기하면 여러 바이트들의 묶음이라고 설명한다. char타입의 메모리는 메모리 안의 저장공간인 수많은 작은 칸 중 하나를 요청한다. 각 칸은 어떤 방식으로든 0과 1을 표현하고 있을 것이다. 이제 실제로 코드를 작성해본다. "HI!"를 출력하고 싶은데 C는 기본적으로 문자열(string)이라는 자료형이 없다. 그래서 표현 할 수 있는 코드는 이렇게 작성될 수 있다. char c1 = 'H'; char c2 = 'I'; char c3 = '!'; 이런 코드는 디자인적으로도, 메모리 저장 방식에도 문제가 있다. 또 같은.. 2021. 12. 20. [CS50] 제 3-1강 배열 강의는 3강으로 되어있지만 내용이 길어 두 편으로 나눈다. 3-1의 내용은 이전에 배웠던 컴파일의 흐름을 좀 더 자세하게 익히고 디버깅하는 방법, 그리고 코드의 디자인이 중요한 이유, 러버덕이 무엇인지를 간단히 설명한다. 컴파일의 흐름과 코드의 디자인이 중요한 이유에 대해 알고나서 배열에 대해 강의를 시작하는데 키야아아아! 기가막힌다. 한낱 배열이 아닌 배열이 킹갓코드임을 알 수 있게 해주는, 메모리에서 저장방식과 알고리즘의 기본 초석이 되는 중요한 배열이라는 것이다. 이것이 하버드의 강의인가? 나도 배웠는데 기억을 못하는 걸까? 혹은 내가 제대로 공부하지 않은걸까? 아마 셋 모두 해당하지 않을까 싶고 반성해본다. 일단 본문에서 다루는 내용은 배열이 왜 중요한 지 알 수 있게끔 해주는 컴파일의 흐름, 디.. 2021. 12. 19. [CS50] 제 2강 - C언어 CS50 2강에서는 C언어 기초를 배운다. 코딩에 사용되는 언어는 여러 가지가 있지만 C언어를 가장 기초적으로 알려준다. 1강에서 배운 알고리즘 기초를 어떻게 컴퓨터가 인간의 언어를 받아들이고 해석하는지 알려준다. 소스 코드 -> 번역을 수행하는 알고리즘 프로그램 = 컴파일러 -> 머신 코드 (2진법) 인간이 작성하는 소스코드는 컴파일러라는 프로그램이 기계어로서 최종적으로는 2진법 문장으로 변환시켜준다. "clang" 은 코드를 컴파일하는 프로그램의 이름이다. 어셈블리어를 출력하지만 어쨌든 머신 코드이다. 강의 중간중간 교수님은 학생들에게 질문이 있냐고 묻는데 #include int main (void) { printf("hello world"); } 코드가 이렇게 작성되어있었고, 질문 중 하나가 두 번.. 2021. 12. 18. 이전 1 2 다음