모두를위한컴퓨터과학

· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 트라이 트라이는 각 노드가 배열로 이루어진 트리 형태의 자료 구조이다. 예를 들어 알파벳으로 이루어진 문자열 값을 저장한다고 하면 노드들은 a-z 값을 가지는 배열이 된다. 그리고 배열의 각 요소(알파벳)은 다음 층의 노드(a-z 배열)을 가리킨다. 아래는 Hermione, Harry, Hagrid 세 문자열을 트라이에 저장한 형태이다. 트라이에서 값을 검색하는데 걸리는 시간은 문자열의 길이에 의해 한정되기..
· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 자료 구조 자료 구조(데이터 구조)는 컴퓨터 메모리를 더 효율적으로 관리하기 위해 새로 정의하는 구조체로 일종의 메모리 레이아웃 또는 지도로 생각하면 된다. 자료 구조 중에는 연결 리스트, 해시 테이블, 트라이, 스택, 큐, 딕셔너리 등이 존재한다. 연결 리스트 연결 리스트는 각 값이 메모리 상의 여러 군데에 나누어져 존재하지만 바로 다음 값의 메모리 주소를 기억하고 있어 배열과 비슷하게 값을 연이어 읽을 ..
· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org C로 구현할 수 있는 다양한 데이터 구조를 배우기 이전에 데이터 구조를 정의하고 관리하는데에 있어서 반드시 필요한 개념인 메모리와 포인터를 복습해보자. malloc과 포인터 복습 이전에 작성한 포스팅 '[CS][CS50] 메모리 - 메모리 주소 / 포인터', '[CS][CS50] 메모리 - 문자열 / 문자열 비교 / 문자열 복사 / 메모리 할당과 해제 / 메모리 교환, 스택, 힙' 참고 아래 코드의 문제점을..
· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 힙 오버플로우 / 스택 오버플로우 앞서 본 메모리 구조를 복습해보자. machine code : 프로그램이 실행될 때 그 프로그램이 컴파일된 바이너리가 저장된다. globals : 프로그램 안에서 저장된 전역 변수가 저장된다. heap (힙) : malloc 로 할당된 메모리의 데이터가 저장된다. malloc 에 의해 메모리가 더 할당될수록, 점점 사용하는 메모리의 범위가 아래로 늘어난다. stack (스택..
· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org C로 작성한 변수들이 실제로 컴퓨터 메모리에 저장되는 모습에 대해서 알아보자. 메모리 주소를 나타내는 방법과 그 주소를 알아내는 방법, 그 주소에 찾아가는 방법을 차례로 보자. 문자열 복습해보자면 문자열은 문자의 배열이다. string s = "EMMA"; 위 처럼 선언된 변수 s은 사실은 ["E", "M", "M", "A", \0] 라는 문자열을 가리키는 포인터가 된다. 더 상세히는 문자열의 가장 첫번째 ..
· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org C로 작성한 변수들이 실제로 컴퓨터 메모리에 저장되는 모습에 대해서 알아보자. 메모리 주소를 나타내는 방법과 그 주소를 알아내는 방법, 그 주소에 찾아가는 방법을 차례로 보자. 16진수 이전에 2진수에 대해서 공부한 적이 있는데 이번에는 16진수(Hexadecimal)다. 숫자를 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 총 16개의 기호로 수를 표현하는 방식이다. ..
· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 재귀 함수가 본인 스스로를 호출해서 사용하는 것을 재귀(Recursion)라고 부른다. 재귀를 이해하는데에는 예시를 사용하는 것이 가장 좋다. 예시 : 피라미드 그리기 사용자로부터 높이 값을 받아 해당 높이 값을 가지는 피라미드를 출력하는 프로그램을 만들어보자. #include #include void draw(int h); int main(void){ int height = get_int("Height: ..
· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 정렬되지 않은 리스트를 탐색하는 것보다는 정렬한 뒤에 탐색하는 것이 더 효율적이며 이 정렬 방법들에 대해서 알아보자. 버블 정렬 버블 정렬이란 두 개의 인접한 자료 값을 비교하면서 위치를 교환하는 방식으로 정렬하는 방법이다. 단 두개의 요소만 정렬해주는, 좁은 범위의 정렬에 집중한다. 때문에 간단하지만 너무 많은 교환이 일어나는 낭비가 발생할 수도 있다. 만일 1부터 8까지의 숫자로 구성된 [6, 3, 8,..
· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 검색 알고리즘 배열을 복습하자면 한 자료형의 여러 값들이 메모리상에 모여있는 구조를 말한다. 컴퓨터는 이 값들에 접근할 때 배열의 인덱스(indx)를 이용해 하나 하나 찾아보아야 한다. 특정 값이 배열 안에 존재하는지를 확인하는 방법(검색 알고리즘)은 배열이 정렬되어 있는지 여부에 따라 선형 검색과 이진 검색을 사용할 수 있다. 선형 검색 배열이 정렬되어 있지 않은 경우에 사용하기 좋은 검색 알고리즘. 배열..
· CS/CS50
boostcource 모두를 위한 컴퓨터 과학 (CS50 2019) : David J. Malan www.boostcourse.org/cs11 실습환경 : CS50 Sandbox & CS50 IDE 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 명령행 인자 이전까지 CS50 Sandbox 에서 컴파일 하는 명령어로 make와 clang을 이용해왔다. $ clang prac.c $ make prac.c 컴파일하고자 하는 코드 외에도 컴파일 후 저장하고자 하는 파일명과 같은 추가적인 정보를 함께 줄 수도 있는데 이런 정보들을 명령행 인자(command-line arguments) 라고 부른다. 이전에 사용해본적이 있는 -o 도 명령행 인자의 예시이다...
개발하는 이령
'모두를위한컴퓨터과학' 태그의 글 목록