공부 STUDY

    CS | 자료구조(1) - malloc 과 포인터 복습, 배열의 크기 조정, 연결 리스트 [도입, 코딩]

    CS | 자료구조(1) - malloc 과 포인터 복습, 배열의 크기 조정, 연결 리스트 [도입, 코딩]

    아래와 같은 main 함수 코드가 있다. 여기서 문제가 될 만한 지점이 있는데... int main(void) { int *x; int *y; x = malloc(sizeof(int)); *x = 42; *y = 13; } main 함수 안의 첫 두 줄에서는 포인터 x와 y를 선언한다. 그리고 x에는 malloc 함수를 이용해서 int 자료형 크기에 해당하는 메모리를 할당한다. 그 다음에는 x와 y 포인터가 가리키는 지점에 각각 42와 13을 저장한다. 여기서 문제가 될 만한 부분은 *y = 13 이다. y는 포인터로만 선언되었을 뿐이지, 어디를 가리킬지에 대해서는 아직 정의가 되지 않았다. 따라서 초기화 되지 않은 *y는 프로그램 어딘가를 임의로 가리키고 있을 수도 있다. 따라서 그 곳에 13이라는 값..

    CS50 | 메모리(2) - 메모리 교환, 스택, 힙, 파일 쓰기/ 읽기

    CS50 | 메모리(2) - 메모리 교환, 스택, 힙, 파일 쓰기/ 읽기

    아래와 같은 코드가 있다. 함수 swap은 정수 a와 b를 입력받아 그 값을 바꾸는 일을 수행한다. main 함수에서는 x에 1, y에 2를 입력하고 swap 함수를 통해 그 두 값을 바꾸려고 한다. 과연 내 의도대로 잘 바뀌어 출력이 될까? #include void swap(int a, int b); int main(void) { int x = 1; int y = 2; printf("x is %i, y is %i\n", x, y); swap(x, y); printf("x is %i, y is %i\n", x, y); } void swap(int a, int b) { int tmp = a; a = b; b = tmp; } 위 코드를 컴파일하고 출력해보면 의도와는 다르게 swap 함수를 거친 후에도 x와 ..

    CS50 | 메모리 - 매모리 주소, 포인터, 문자열, 문자열 비교, 복사, 할당 그리고 해제

    CS50 | 메모리 - 매모리 주소, 포인터, 문자열, 문자열 비교, 복사, 할당 그리고 해제

    16진수 컴퓨터과학에서는 숫자를 10진수나 2진수 대신 16진수(Hexadecimal)로 표현하는 경우가 많다. 컴퓨터에서 데이터를 처리하기 위해 16진수를 사용할 때 장점이 있기 때문이다. 16진수와 일상생활에서 우리가 사용하는 10진수와 비교하면 그 차이를 알 수 있다. 16진수를 사용하면 10진수보다 2진수를 간단하게 나타낼 수 있다. 10진수를 16진수로 바꾸어보기 JPG 이미지 파일은 항상 255 216 255 로 시작되고 이것은 10진수이다. 하지만 실제 컴퓨터 내에서는 10진수를 사용하지 않는다. 컴퓨터는 0과 1만을 이해할 수 있기 때문이다. 먼저 255 216 255를 2진수로 나타내보면 위와 같다. 2진수로 모든 데이터를 표현하기에는 너무 길어지므로 16진수로 바꾸어 보면 2^4 은 1..

    CS50 | 알고리즘 - 버블 정렬, 선택 정렬, 정렬 알고리즘의 실행 시간

    CS50 | 알고리즘 - 버블 정렬, 선택 정렬, 정렬 알고리즘의 실행 시간

    버블 정렬 정렬되지 않은 리스트를 탐색하는 것 보다 정렬한 뒤 탐색하는 것이 더 효율적이다. 정렬 알고리즘 중 하나는 버블 정렬이다. 버블 정렬은 두 개의 인접한 자료 값을 비교하면서 위치를 교환하는 방식으로 정렬하는 방법을 말한다. 버블 정렬은 단 두 개의 요소만 정렬해주는 좁은 범위의 정렬에 집중한다. 이 접근법은 간단하지만 단 하나의 요소를 정렬하기 위해 너무 많이 교환하는 낭비가 발생할 수도 있다. 아래와 같은 8개의 숫자가 임의의 순서로 나열되어 있다. 이 숫자들을 오름차순으로 정렬하기 위해 바로 옆의 있는 숫자들과 비교하는 방법을 사용해 보자. 6 3 8 5 2 7 4 1 먼저 가장 앞의 6과 3을 비교해서 순서를 바꾼다. 교환 전: 6 3 8 5 2 7 4 1 교환 후: 3 6 8 5 2 7..

    CS50 | 알고리즘 - 검색 알고리즘, 알고리즘 표기법, 선형 검색

    CS50 | 알고리즘 - 검색 알고리즘, 알고리즘 표기법, 선형 검색

    배열은 한 자료형의 여러 값들이 메모리상에 모여 있는 구조이다. 컴퓨터는 이 값들에 접근할 때 배열의 인덱스 하나하나를 접근한다. 만약 어떤 값이 배열 안에 속해 있는지를 찾아 보기 위해서는 배열이 정렬되어 있는지 여부에 따라 아래와 같은 방법을 사용할 수 있다. 1) 선형 검색 배열의 인덱스를 처음부터 끝까지 하나씩 증가시키면서 방문하여 그 값이 속하는지를 검사한다. 아래 의사코드와 같이 나타낼 수 있다. For i from 0 to n–1 If i'th element is 50 Return true Return false 2) 이진 검색 만약 배열이 정렬되어 있다면, 배열 중간 인덱스부터 시작하여 찾고자 하는 값과 비교하며 그보다 작은(작은 값이 저장되어 있는) 인덱스 또는 큰 (큰 값이 저장되어 있..