Computer Science/Boostcourse CS50
-
5. 메모리Computer Science/Boostcourse CS50 2021. 12. 24. 02:46
메모리에 대하여 본격적으로 설명드리기 앞서, 익숙한 이야기부터 해보려 합니다. 어떠한 변수를 선언한 후 그 변수에 사용자가 원하는 값을 대입하기 위하여 항상 입력을 받았습니다. #include int main() { int var; scanf("%d",&var); } 위와 같이 입력을 받을 때는 변수 앞에 & 연산자가 왜 붙는지 궁금하실 겁니다. &가 붙는 이유는 변수를 선언하면 컴퓨터 메모리 어딘가에 자료형의 크기만큼 메모리를 차지하는데, 여기서 차지하는 메모리마다 주소를 갖고 있습니다. 이 주소에 & 연산자를 통해 접근하여 메모리 공간 안에 있는 데이터를 변경시켜주기 위한 것입니다. #include int main() { int var; int *pvar = &var; scanf("%d",&var..
-
4-1 애너그램 판별 프로그램Computer Science/Boostcourse CS50 2021. 12. 24. 02:43
애너그램이란 문자의 구성은 같고, 배치 또는 뜻만 다른 문자열을 의미합니다. 버블 정렬 알고리즘을 이용하여 5개의 숫자로 구성된 문자열 애너그램을 판별하는 프로그램을 작성해보았습니다. #include #include #define SIZE 5 int check_anagram(char anagram[][6]); int main() { // 문자열의 끝인 null값까지 포함하여 6열까지 공간을 할당해줘야함. char anagram[2][6] = {"11132", "21131"}; if(check_anagram(anagram)) printf("Anagram True\n"); else printf("Anagram False\n"); } 정렬 후 문자열이 같은지 비교하기 위하여 strcmp 함수를 사용해야 하므로..
-
4. 알고리즘Computer Science/Boostcourse CS50 2021. 12. 24. 02:40
평소에 프로그래밍을 하면서, "알고리즘"이라는 단어를 많이들 접해보셨을 것입니다. 어떤 문제를 푸는 데 있어서도 알고리즘은 거의 항상 쓰이고, 중요한 개념이지만 정확히 무엇을 뜻하는지는 모른 채 학습을 진행합니다. 이번에는 알고리즘의 정의와 조건 그리고 중요성에 대해 말씀드리고자 합니다. 알고리즘은 입력값(input)을 출력값(output)의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열입니다. 간단히 말해서 주어진 문제를 해결하기 위한 절차나 방법이라고도 불립니다. 알고리즘의 중요한 조건으로는 정확성과 효율성이 있는데, 정확성은 본인이 선택한 알고리즘을 통하여 확실하게 그 문제를 해결할 수 있는지에 대한 것이고 효율성은 작업을 완료하기까지 얼마나 시간..
-
3-2 배열 Queue 구현Computer Science/Boostcourse CS50 2021. 12. 24. 02:37
Queue는 선형 자료구조 중 하나로, 은행 업무와 비유를 해보면 사람들은 대기표를 뽑고 은행원들은 대기표의 번호 순에 따라 업무를 해결해 주는데 이때는 당연히 먼저 온 사람이 업무를 먼저 보고 빠져나가는 식입니다. 이처럼 큐는 First In First Out으로 선입선출의 특징을 가지고 있습니다. 큐의 대표적인 기능을 간단히 살펴보자면 다음과 같습니다. 1. 큐에 데이터 삽입 (= 대기표 뽑기) 2. 큐에 쌓여있는 데이터 조회 (= 대기인원 보여주기) 3. 큐에 있는 데이터를 앞에부터 제거 (= 순서대로 대기인원 호출) 위의 세 가지 기능은 대표적인 것이고 이외에 추가적으로 큐가 비어있는지 확인을 해주는 함수와 큐에 들어갈 수 있는 공간이 꽉 찼는지 확인하는 함수를 구현해보았습니다. #in..
-
3-1 학점 계산 프로그램Computer Science/Boostcourse CS50 2021. 12. 24. 02:31
저번 시간에 배열을 알아보았고, 이를 응용해 성적에 따라서 학점을 출력해 주는 프로그램을 작성해보았습니다. 프로그램을 작성하면서 느꼈던 것은 다시 봐도 main 함수의 코드를 줄이고 최대한 함수화를 시켜주는 것이 중요하다는 생각이 들었습니다. main 함수 내 코드가 길어지게 된다면 저 자신은 몰라도 다른 사람이 코드를 보았을 때, 가독성이 떨어지고 각각의 코드가 어떤 기능을 담당하는 코드인지 헷갈릴 수 있기 때문입니다. #include #include #define DATA_SIZE 9 const char* Student_grades[DATA_SIZE] = {"A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"}; const int Student_scores[DATA_S..
-
3. 배열Computer Science/Boostcourse CS50 2021. 12. 24. 02:27
비슷한 종류의 데이터들을 여러 개의 변수로 하나 하나 선언하기에는 시간도 많이 걸릴뿐더러 효율적이지 못한 방법이라고 할 수 있습니다. 그렇기에 다수의 데이터를 관리하기 위해서는 하나의 변수에 데이터들을 담아 편리하게 사용할 수 있는 배열이 필요한 것입니다. 배열은 특정 자료형의 변수를 선언하고 사이즈를 지정해주게 되면 메모리상 어딘가에 특정 크기만큼 연속적인 자리를 차지하게 되며, 비슷한 값들을 모아서 저장하고 싶을 때 사용하는 것입니다. 이때, 데이터들을 하나의 변수로 관리할 수 있다는 점이 시간적 측면에서 봤을 때 배열을 사용하는 이유가 아닐까 싶습니다. 일반적으로 변수를 선언할 때는 (변수의 자료형) (변수명)의 형식으로 작성하고, 이와 비슷하게 배열의 변수는 (변수의 자료형)..
-
2-2 음식메뉴 소개 프로그램Computer Science/Boostcourse CS50 2021. 12. 24. 02:23
C언어를 이용한 두번째 프로그램으로 설명해 볼 프로그램은 요일을 입력했을 때 각 요일별로 어떤 음식이 나오는지 프로그램 사용자에게 알려주는 프로그램입니다. 이번 프로그램의 소스코드 길이는 짧으므로 두개의 문단으로 나누어 소개해보겠습니다. #include #include #define SIZE 10 void food_list(char* day, int* replay); // 음식 리스트 int main() { int replay; char day[SIZE], check; printf("===============THIS WEEK FOOD MENU===============\n"); while(1) { printf("요일을 입력하세요: "); scanf("%s",day); food_list(day, &rep..
-
2-1 재고량 관리 프로그램Computer Science/Boostcourse CS50 2021. 12. 24. 02:19
네이버 부스트코스 대외활동을 진행하면서 만들어 봤던 첫번째 C언어 프로그램은 바로 구조체, 함수, 배열, 반복문, 조건문를 이용한 재고량 관리 프로그램입니다. 부족한 부분이 있겠지만, 나름대로 기능을 나누고 함수화하여 최대한 사용자 관점에서 가독성을 생각하며 구현해보았습니다. #include #include #include #include #define SIZE 30 typedef struct { int inventory, order, remain_inventory, price; double sales, TAX; char name[SIZE]; }PRODUCT; int cnt = 0; // 물품 종류 수 void product_input(PRODUCT* p); // 재고 관리 void product_ini..