컴퓨터과학(8)
-
[컴퓨터 과학 cs50] 알고리즘 시간복잡도 BigO와 오메가!
알고리즘을 실행하는데 걸리는 시간을 표현한다 위와 같은 그림을 공식으로 표기한 것이 Big O 표기법입니다. 여기서 O는 “on the order of”의 약자로, 쉽게 생각하면 “~만큼의 정도로 커지는” 것이라고 볼 수 있습니다. O(n) 은 n만큼 커지는 것이므로 n이 늘어날수록 선형적으로 증가하게 됩니다. O(n/2)도 결국 n이 매우 커지면 1/2은 큰 의미가 없어지므로 O(n)이라고 볼 수 있습니다. 빨간 선과 노란선이 같다고 말할 수 있는 이유는 만약 우리가 푸는 문제가 충분히 크다면, 즉 문제가 계속 커져서 이 정도 크기의 화면에 담기도록 축소해서 보기 위해 x축과 y축을 늘려본다면, 노란 선과 빨간선은 아주 가까워질 것이다. 계속 그림을 축소하며, 더욱더 크기가 큰 문제를 본다면, 두 선은..
2021.01.31 -
[컴퓨터 과학 cs50]함수에서의 명령행 인자(ing argc, string argv[])
들어가기전에 make나 clang과 같은 프로그램을 실행할 때 컴파일하고자 하는 코드 외에도 컴파일 후 저장하고자 하는 파일명과 같이 추가적인 정보를 함께 줄 수도 있습니다. 이런 정보들을 명령행 인자 라고 부릅니다. 우리가 작성하는 프로그램에서도 명령행 인자를 받을 수 있도록 설계할 수 있습니다. stdio.h는 printf와 같은 함수의 프로토타입이 내장되어있다. 그 코드들이 파일의 전처리 과정에서 복사되어 옮겨지는 식이었다. 우리가 여태껏 많이 사용해온 main 함수를 보다 자세히 들여다볼 때가 왔습니다. main도 그 형태를 보면 하나의 함수임을 알 수 있는데요, 이젠 더이상 main() 안에 기계적으로 void 라고 입력하는 대신 아래 코드와 같이 argc, argv 를 정의해보겠습니다. mai..
2021.01.30 -
[컴퓨터 과학 cs50] 문자열 길이는 어떻게 찾을 수 있을까?! ASCII에서 함수쓰기까지~
들어가기전에 문자열 안에 포함되어 있는 문자를 검색하기 위해서는 어떻게 해야 할까요? 또 특정 문자를 다른 문자로 바꾸기 위해서는 어떻게 해야 할까요? 이런 질문들에 답해보도록 하겠습니다. 문자열의 길이 및 탐색 사용자로 부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들어 보겠습니다. 간단하게 for 루프를 통해 문자열의 인덱스를 하나씩 증가시켜가면서 해당하는 문자를 출력하면 될텐데요, 문자열의 끝은 어떻게 알 수 있을까요? 한가지 방법은 해당하는 인덱스의 문자가 널 종단 문자, 즉 ‘\0’와 일치하는지 검사하는 것입니다. 즉, s라는 문자열이 있다고 할 때 for (int i = 0; s[i] != ‘\0’; i++) { ..} 과 같은 루프를 사용하면 되겠죠. 하지만 아래 코드와 같이 str..
2021.01.30 -
[컴퓨터 과학 cs50] 문자열은 배열에 어떻게 저장될까?
들어가기 전에 우리는 여태껏 문자열을 저장하기 위해 string 자료형을 사용하였습니다. ‘문자열’이라는 단어는 다시 말해 문자가 ‘나열되어 있다’ 또는 ‘배열되어 있다’ 라는의미로 추측해 볼 수 있습니다. 이런 관점에서 봤을 때 string 자료형은 C에서 정확히 어떻게 정의되어 있을까요? 배열이라는 개념이 문자열과 어떻게 연결되는지 알아보도록 하겠습니다. char는 1바이트, int는 4바이트이다! 따라서 정수인 72, 73, 33은 각각 4바이트씩 저장이 되는 것이다! 컴퓨터가 각 값의 자료형에 따라 알아서 필요한 저장 공간을 계산한다! H, I, !는 char로 각각 1byte로 각각 c1, c2, c3에 저장되어있다! 문자열 내 각 문자를 가져 올 수 있다. 배열을 다룰 때 처럼 각 문자에 접근..
2021.01.30 -
[컴퓨터 과학 cs50] 배열(2) 좀 더 동적으로 만들 순 없을까?
전역변수 const int N = 3; //변수명은 대문자로 적어야 N이라는 값을 사용할 수 있다. 관습에 따라 n은 소문자가 아니라 대문자로 쓴다. 상수는 말 그대로 변하지 않는 것이다! const로 해당 변수를 상수로 지정하면, clang 컴파일러는 여러분이나 다른 사람들이 실수로 그 값을 바꾸지 않도록 해준다. 그럼 이제 n을 어디에 사용하든 언제나 같은 값을 가진다. 이를 전역 변수라 한다. 함수 바깥에서 선언하는 변수를 말한다. 엉성해 보이지만 상수는 예외이다. 상수는 우리가 한 번 값을 지정해 놓고 까먹은 뒤에 몇 주, 몇 달 뒤에 찾아와서 과제 수가 4개나 5개로 바뀌었다면, 코드를 컴파일링하기 전 값을 수정하기에 편리하다. 이유는 코드 맨 위에 있기 때문이다! 그래서 코드를 막 살펴 볼 필..
2021.01.29 -
[컴퓨터 과학 cs50] 배열(1)-변수는 컴퓨터에 어떻게 저장될까?
이번 강의에서 살펴 볼 것은 다음과 같습니다! 우리가 특정 자료형의 변수를 선언하면 이는 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 됩니다. 만약 비슷한 종류의 값을 모아서 저장하고 싶다면 어떻게 해야 할까요? 메모리상에서 여러 값을 연이어서 저장하고 사용하는 방법과 그 이점을 알아보겠습니다. 메모리 C에는 아래와 같은 여러 자료형이 있고, 각각의 자료형은 서로 다른 크기의 메모리를 차지합니다. bool: 불리언, 1바이트 --> 8bit char: 문자, 1바이트 int: 정수, 4바이트 --> 32bit float: 실수, 4바이트 long: (더 큰) 정수, 8바이트 --> 64bit double: (더 큰) 실수, 8바이트 string: 문자열, ?바이트 컴퓨터 메모리에 있는 모든 변수들은..
2021.01.29