🖥️Computer Science/CS50

배열의 크기 조정하기 일정한 크기의 배열이 주어졌을 때, 그 크기를 키우려면 어떻게 해야 할까? 단순하게 현재 배열이 저장되어 있는 메모리 위치의 바로 옆에 일정 크기의 메모리를 더 덧붙이면 되겠지만, 실제로는 다른 데이터가 저장되어 있을 확률이 높다. 따라서 안전하게 새로운 공간에 큰 크기의 메모리를 다시 할당하고 기존 배열의 값들을 하나씩 옮겨줘야 한다. 따라서 이런 작업은 O(n), 즉 배열의 크기 n만큼의 실행 시간이 소요될 것이다. #include #include int main(void) { //int 자료형 3개로 이루어진 list 라는 포인터를 선언하고 메모리 할당 int *list = malloc(3 * sizeof(int)); // 포인터가 잘 선언되었는지 확인 if (list == N..
메모리 주소 16진수(Hexadecimal) 컴퓨터과학에서는 숫자를 10진수나, 2진수 대신 16진수로 표현하는 경우가 많다. 4bits 씩 16진수로 변환 후 0x를 붙혀 뒤에 오는 문자들이 16진수임을 알려준다. 컴퓨터는 8개의 비트가 모인 바이트 단위로 정보를 표현 한다. 그래서 2개의 16진수는 1byte의 2진수로 변환되기 때문에 정보를 표현하기 매우 유용하다. C에서는 변수의 메모리상 주소를 받기 위해 &이라는 연산자를 사용할 수 있다. #include int main(void) { int n = 50; printf("%p\n", &n); } 위 코드를 실행하면 ‘0x7ffe00b3adbc’와 같은 값을 얻을 수 있고, 이는 16진법으로 표현된 메모리의 주소이다 반대로 *를 사용하면 그 메모리..
검색 알고리즘 선형 검색 배열의 인덱스를 처음부터 끝까지 하나씩 증가시키면서 방문하여 그 값이 속하는 지를 검사한다. 이진 검색 만약 배열이 정렬되어 있다면, 배열 중간 인덱스부터 시작하여 찾고자 하는 값과 비교하며 그보다 작은 인덱스 또는 큰 인덱스로 이동을 반복한다. 알고리즘 표기법 Big O는 알고리즘 실행시간의 상한을 나타낸 것이다. O(n)은 on the order of 의 약자로 쉽게 생각하면 ~만큼의 정도로 커지는 것이라고 볼 수 있다. O(n)은 n만큼 거지는 것이므로 n이 늘어날 수록 선형적으로 증가하게 된다. 따라서 logn과 같은 형태가 되어야 좋은 성능을 낸다고 할 수 있겠다. O(n^^2) O(n log n) O(n) -선형검색 O(log n) - 이진 검색 O(1) Big Ω는 ..
컴파일링 #include int main(void) { printf("hello, world\n"); } 위와 같은 코드를 살펴보면 printf라는 함수는 괄호 안에 있는 문자열을 출력하는 함수이다. 그리고 이 함수를 출력하기 위해서는 stdio.h라는 라이브러리가 필요하다. (stdio.h는 헤더파일로 C언어로 작성되어 있으며 파일명이 .h로 끝나는 파일이다. 그래서 이후 프로그램을 컴파일하게 되면, 파일 속 들어 있는 printf 함수의 초기 버전으로 하여금 컴퓨터가 알 수 있도록 한다.) 우리는 이전에 clang hello.c 로 컴파일을 하고, ./a.out 명령으로 프로그램을 실행하였다. 만약 a.out 처럼 엉뚱한 이름이 아닌 다른 이름으로 컴파일을 하고 싶다면 clang -o hello he..
C기초 c 어는 아주 오래되고 전통적인 순수 텍스트 기반의 언어이다. int main(void)는 우리가 코드를 실행할 수 있도록 시작한다는 의미를 가지고 있다. C에는 printf라는 함수가 있다. 글자나 단어, 문자을 적을 때는 언제나 텍스트에 " " 쌍 따옴표로 감싸야 한다. 그리고 우리가 일상에서 문장의 끝에 붙이듯 C에서는 세미콜론( ; ) 을 붙여야 한다. (참고로 \n은 줄바꿈의 기능을 한다.) 우리가 문서를 저장하는 것처럼 , 문서.확장자명 으로 저장되는 것처럼. C로 작성된 코드에도 파일명.c로 저장해야 한다. 터미널 창의 명령어 프롬프트에서 $(달러사인) 기호 옆에 우리가 원하는 명령어를 입력하면 된다. clang hello.c 라는 명령어는 "clang" 이라는 컴파일러로 "hello..
2진법 컴퓨터에게 우리가 처음 값을 인식시키는 방법은 전류를 보내고 끊고 하는 식의 신호를 보내는 것에서 시작되었다. 그렇게 1과 0이 처음 컴퓨터에 인식되었다. 우리가 실생활에서 사용하는 숫자는 10진법이다. 하지만 우리의 컴퓨터가 인식할 수 있는 가장 기본이 되는 신호는 0과 1이다. 이렇게 표현하는 방식은 2진법이라고 한다. 하지만 0과 1로만으로는 그 많은 사진, 동영상, 간단한 기호도 표현하는 것일까? 그에 대한 답은, 이진법에 해당하는 값에 의미를 할당하는 것이다. 즉, 이진법을 통해 새로운 의미를 표현하는 것이다. 컴퓨터 내에 있는 굉장히 많은 스위치(트렌지스터)가 전기를 켜고 끄는 방식을 통해 값을 기록한다. 2진법에서 하나으 자릿수를 표현하는 단위를 비트(bit)라고 한다. binary ..
박필중
'🖥️Computer Science/CS50' 카테고리의 글 목록