컴퓨터과학 12

[CS50] 검색 알고리즘

지금까지는 메모리의 구조, 자료형 같은 기본적인 개념을 공부했지만 이번 포스팅부턴 지금껏 배운 내용을 활용해서 검색, 정렬 등과 같은 문제를 풀어내는 알고리즘에 대해 공부하고 정리해보도록 하겠습니다. 검색 알고리즘은 선형 검색, 이진 검색, 해시 검색 이렇게 3가지가 있는데 이중 선형 검색과 이진 검색에 대해 공부해보도록 하겠습니다. 선형검색 만약 10 23 6 1 2 50 이렇게 정렬이 되지 않은 6개의 숫자가 보이지 않게 있을 때 50을 찾아내는 방법엔 어떤 것이 있을까요? □□□□□□ 이렇게 박스 안에 들어있다고 가정한다면 당연히 정렬도 되어있지 않은 수니까 맨 처음 □부터 끝까지 하나하나 열어서 살펴보는 방법밖엔 없습니다. 만약 여기서 50이 가장 뒤에 있다면 모든 박스를 다 열어봐야 할 겁니다...

[CS50] 명령행 인자

명령행 인자란? 사용자가 명령행에서 명령을 실행할 때 해당 명령과 함께 지정하는 인자를 의미합니다. 지금까지 clang을 사용할 때 -o 옵션을 줘서 a.out이 아닌 사용자가 원하는 이름으로 파일을 컴파일했었는데요 여기에서 - o 를 명령행 인자라고 부릅니다. 그렇다면 make나 clang 이외에 사용자가 작성하는 프로그램에서 명령행 인자를 받을 수 있도록 설계하는 방법에 대해 공부해보도록 하겠습니다. 지금까지 코드를 짜면서 매일같이 써온 main함수를 살펴볼까요? main도 형태를 보자면 하나의 함수인데요 여기서 괄호안에 void대신 다른 형태의 코드를 작성해봅시다. #include #include int main(int argc, string argv[]) { if (argc == 2) { prin..

CS 기초/배열 2021.08.10

[CS50] 문자열의 활용

지금까지 문자열의 기본적인 개념들을 학습해봤습니다. 이번 포스팅에서는 문자열을 활용하여 특정 문자를 다른 문자로 치환하거나 문자열 안에 포함되어있는 문자를 검색해보는 방법에 대해 공부해보도록 하겠습니다. 문자열의 길이 및 탐색 사용자로부터 문자열을 입력받아 문자열을 출력하기 위해서는 문자열의 끝을 알아야합니다. 그렇다면 정해지지 않은 문자열의 끝은 어떻게 알 수 있을까요? 문자열의 끝을 알수있는 방법 중 하나는 인덱스의 문자가 종단 문자(\0)와 일치하는지 검사하는 것입니다. for (int i = 0; s[i] != '\0'; i++){ ..... } s라는 문자열이 있다고 했을 때 이런 식으로 길이를 구할 수 있습니다. 다른 방법은 strlen( )이라는 함수를 사용하는 것입니다. #include #..

CS 기초/배열 2021.08.09

[CS50] 문자열과 배열

C뿐 아니라 많은 프로그래밍 언어들은 문자열을 저장하기 위해 string 자료형을 사용했습니다. 문자열이라는 단어는 문자가 나열되어있다. 즉 배열되어있다.라는 의미로 추측해볼 수 있는데요. 이런 관점에서 string 자료형이 C에서 어떻게 정의되어있는지 배열과 관련해서 공부해보도록 하겠습니다. string은 말 그대로 문자(char)의 배열이었습니다. 만약 string s = "HI!"; 로 정의되어 있다면 s는 문자열이기 때문에 메모리상에 'H', 'I', '!'로 저장되어 있을겁니다. 그런데 사실 문자열은 저번 포스팅에서 설명했듯이 길이가 정해져 있지 않기때문에 메모리의 크기 역시 정해져있지 않습니다. 그럼 string이 연속으로 정의되어있다면 어떻게 구분할까요?? 그래서 string에는 종단 문자인..

CS 기초/배열 2021.08.08

[CS50] 배열

지금까지 특정 자료형의 변수를 선언하면 컴퓨터 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 됩니다. 이번 포스팅에서는 메모리상에서 여러값을 연이어 저장하는 방법을 공부해보도록 하겠습니다. C에는 여러가지 자료형과 그에 맞는 메모리의 크기가 있습니다. - char : 1byte - bool : 1byte - int : 4byte - float : 4byte - long : 8byte - double : 8byte - string : 알 수 없음(길이에 따라 다르다) 이러한 데이터들은 RAM이라고 하는 컴퓨터 하드웨어에 저장이 됩니다. 이제 여러값을 연이어 저장해서 사용하기 위해서는 먼저 배열이란 단어에대해 알아야합니다. 배열이란? 번호(인덱스)와 번호에 대응하는 데이터들로 이루어진 자료구조이다.(출처..

CS 기초/배열 2021.08.07

[CS50] 코드의 디자인

규모가 큰 프로그램을 작성하게 되면 본인 혼자가 아니라 여러 사람들이 함께 작업을 진행하게 됩니다. 이때는 내가 기여한 부분이 프로그램에 오류를 발생시키지 않도록 주의해야 합니다. 또한 같은 코드를 작성했다고 하더라도 어떻게 디자인하는지에 따라 상대방이 코드를 이해하고 수정하는 속도가 달라질 수 있기 때문에 이러한 부분도 신경 써줘야 합니다. 따라서 이번 포스팅에서는 코드의 정확성과 디자인을 어떻게 관리하는지에 대해서 공부해보도록 하겠습니다. 본 포스팅에서 나오는 코드의 사용은 CS50 강의를 위해서 작성되었다고 합니다. CS50 IDE를 제외한 다른 IDE에서는 사용이 불가능할 수 있습니다. check50 ~/ $ check50 cs50/problems/hello (cs50/problems 경로에 있는..

CS 기초/배열 2021.08.06

[CS50] 사용자 정의 함수, 중첩 루프

프로그래밍을 하다 보면 반복적으로 같은 코드를 작성해야 할 때가 있는데, 이때 코드를 여러 번 쓰는 게 아니라 함수 형태로 지정해두면 코드를 간결하게 사용이 가능합니다. 더불어 하나의 루프로 수행하기 힘든 작업을 중첩 루프를 사용해 해결하는 방법도 공부해보도록 하겠습니다. 만약 "에취!"라고 세번 말하는 C 프로그램을 작성할 때 가장 간단한 방법은 단순히 3번 출력하게 만들어주는 것입니다. #include int main(void){ printf("에취!\n"); printf("에취!\n"); printf("에취!\n"); } 그렇다면 이것을 좀 더 간단하게 코딩해본다면 어떻게 될까요? 지난 시간에 배운 루프를 사용하면 더 간단히 표현할 수 있습니다. #include int main(void){ for(..

CS 기초/C언어 2021.08.02

[CS50] 조건문과 루프

오늘은 조건문과 루프는 C에서 어떻게 표현하는지에 대해 공부해보겠습니다. 저번 포스팅에서 C는 오래된 언어이기 때문에 저장하고자 하는 변수의 종류를 꼭 알려줘야 한다고 했습니다. 만약 counter라는 변수에 숫자를 저장하려면 어떻게 표시해야 할까요? 여기서 int는 변수가 정수(Integer)라는 것을 알려주는 것이고 counter라는 변수의 값에 0을 저장하는 것입니다. 마찬가지로 저번 포스팅에서 설명했듯이 = 표시는 같다의 등호(=)가 아닌 오른쪽의 값을 왼쪽으로 할당한다는 할당 연산자로 사용된 것입니다. 그렇다면 변수의 값을 1씩 증가시키려면 어떻게 해야 할까요? 즉 counter에 1을 더한 값을 다시 counter에 할당하면 됩니다. (여기서는 위에서 int counter를 선언했기 때문에 변..

CS 기초/C언어 2021.07.30

[CS50] 문자열

모든 언어가 그렇듯 문자열을 다루기 위해서는 문자열 형식을 가진 변수부터 선언해줘야 합니다. 오늘은 사용자로부터 문자열을 입력받고 입력받은 문자열을 다른 문자열과 합쳐서 출력하는 프로그램을 작성해보겠습니다. 혹시나 실습이 필요하신분들은 https://sandbox.cs50.io/ CS50 Sandbox Temporary programming environments for students and teachers. sandbox.cs50.io 여기서 바로 create눌러서 시작하시면 실습하기 수월합니다. 이렇게 만들어진 스크래치 블록이 있다고 한다면 C로는 어떻게 표현해야 할까요? 지난 포스팅에 say는 printf와 같은 역할을 한다고 공부했습니다. 그렇다면 ask는 어떨까요? ask함수를 C로 가져왔을 ..

CS 기초/C언어 2021.07.29

[CS50] C 기초

그래픽 인터페이스인 스크래치(skratch)를 사용해서도 간단한 프로그래밍이 가능하지만, 텍스트 기반 프로그래밍 언어인 C를 사용해도 컴퓨터에게 동일한 일을 시킬 수 있습니다. C 언어란? 벨 연구소의 데니스 리치가 만든 프로그래밍 언어로 정식 명칭은 'C'지만 한국에서는 'C언어'라고 부른다. 세계적으로 가장 많이 쓰이는 프로그래밍 언어 중 하나이다.(출처 : 나무위키) 우선 저번 시간에 했던 스크래치와 비교해볼 텐데 혹시라도 저번에 스크래치를 사용해보지 않으셨다면 https://darmk.tistory.com/entry/CS50-%EC%8A%A4%ED%81%AC%EB%9E%98%EC%B9%98-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0?category=96447..

CS 기초/C언어 2021.07.28