부스트코스(Boostcourse) CS50 5주차 심화 과정 💎 생각해보기(3)
2021. 2. 19. 21:48
스터디&교육/부스트코스 CS50 2기
strcpy() 와 strncpy() 의 차이점에 대해서 정리해보았다. strcpy() 와 strncpy() 는 문자열을 복사해주는 함수다. 두 함수는 string.h 헤더 파일에 선언되어 있다. 우선, 두 함수의 원형을 확인해보자. char* strcpy(char* destination, const char* source); char* strncpy(char* destination, const char* source, size_t num); 두 함수의 원형을 알 수 있듯이 다른 점은 strncpy() 함수는 복사할 문자열의 길이를 지정할 수 있다는 것이다. 그 외에도 다음과 같이 각 함수의 특징을 알 수 있다. strcpy() 함수는 null byte를 포함하는 src문자열을 dest 버퍼에 복사한다...
부스트코스(Boostcourse) CS50 5주차 심화 과정 💎 생각해보기(2)
2021. 2. 19. 21:39
스터디&교육/부스트코스 CS50 2기
첫 번째로는 이중 포인터에 대한 내용이었고 이번에는 메모리와 오버플로우에 대한 내용에 대해서 알아보았다. 메모리에는 스택, 힙, 데이터, 텍스트 영역 등 다양한 영역으로 나눌 수 있다. 메모리 stack 영역은 지역 변수와 매개 변수가 저장되는 영역이다. 함수가 시작되면 해당 함수의 지역 변수가 스택에 쌓였다가 함수가 종료되면 자동으로 해제된다. [ 스택 오버플로우가 발생하는 경우 ] 스택 오버플로우가 발생하는 경우에 대해서 대표적으로 재귀 함수에 대해서 알아보았다. 재귀함수라고 자기 자신의 함수를 호출해 가독성을 높여주는 함수다. 하지만 재귀함수를 잘못 사용하게 되면 stack overflow 를 발생시키게 된다. 함수를 호출할 때 함수의 파라미터와 리턴 값, 복귀 주소(RET) 등 stack 에 저장..
부스트코스(Boostcourse) CS50 5주차 심화 과정 💎 생각해보기(1)
2021. 2. 19. 21:32
스터디&교육/부스트코스 CS50 2기
5주차 메모리에 대한 내용의 강의를 듣고 심화 과정을 해결해 보았다. 📌 문제 1 첫 번째 문제는 이중 포인터를 사용해서 배열의 값들을 출력하는 문제였다. 배열의 인덱스를 사용하는 것이 아닌 이중 포인터를 통해 값을 가져와야 한다. 기본 값으로 2차원 배열이 주어지고 해당 배열을 이중 포인터를 통해서 값을 출력하면 되는 문제였다. 주어진 2차원 배열은 다음과 같다. Int arr[6][5] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25}, {26, 27, 28, 29, 30} }; 문제를 풀기 위해서는 포인터를 이용해 배열의 값을 가져와야 하는 문제였고 포인터에 대한 ..
부스트코스(Boostcourse) CS50 4주차 심화 과정 💎 생각해보기
2021. 2. 3. 05:05
스터디&교육/부스트코스 CS50 2기
4주차 심화 과정에 대해서 내가 작성한 코드를 정리해보았다. 📌 문제 1 우선 문제를 풀기 위해서 애너그램 대해서 이해해야 했다. 애너그램이란 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것을 말하는데 예를 정말 잘 들어주셔서 쉽게 이해할 수 있었다. 예를 들어, 영어의 'tea'와 'eat'와 같이 각 단어를 구성하는 알파벳은 같은데 뜻이 다른 두 단어 그리고 우리말에서 '문전박대' 와 '대박전문' 과 같이 같은 네 글자를 사용하지만 순서를 바꾸어 다른 뜻으로 사용할 수 있는 것을 애너그램이라고 한다. 문제를 풀기 위해서 강의를 통해 배운 알고리즘을 사용해야 했고 함수를 효율적으로 사용하고 싶어 함수를 사용하는 부분에 더 많은 고민을 했던 것 같다. 그리고 코딩 컨벤션을 통해 코드 스타일을 적용해 ..
부스트코스(Boostcourse) CS50 3주차 심화 과정 💎 생각해보기
2021. 1. 23. 18:21
스터디&교육/부스트코스 CS50 2기
3주차 심화 과정에 대해서 내가 작성한 코드를 정리해보았다. 📌 문제 1 문제를 해결하는 과정에서 출력하는 부분은 어려움 없이 진행된 것 같았다. 전체적으로 어려웠던 점은 함수화하는 과정에서 변수를 어떻게 설정해주어야하고 값을 어떻게 담아서 보내주어야하는지 고민했던 것 같다. 그리고 포인터를 통해서 변수에 값을 어떻게 저장해주어야 하는지에 대해서도 많이 찾아봤던 것 같다. 마지막으로 while 반복문에서 scanf 함수로 정수를 입력받는 데 문자를 입력하게 되면 무한루프에 빠지는 것이었다. rewind(), fflush() 등 함수를 사용해 표준 입력 버퍼라는 것을 초기화해주어야 한다고 하는데 아무리 사용해봐도 적용이 되지 않았다. 그래서 getchar() 함수를 통해 초기화해주어 문자가 입력되었을 때 ..
부스트코스(Boostcourse) CS50 2주차 심화 과정 💎 생각해보기
2021. 1. 19. 03:00
스터디&교육/부스트코스 CS50 2기
2주차 C언어 심화 과정에 대한 내용이다. 문제는 저작권상 적지 않았고 내가 작성한 코드만 정리하려고 한다. 📌 문제 1 간단한 연산문제와 조건문을 적절히 사용하면 쉽게 해결할 수 있는 문제였다. 나는 반복문을 통해서 재고가 소진될 때까지 주문할 수 있게 만들어보았다. 그리고 글씨에 색을 넣어 입력하는 부분과 재고가 부족할 때, 재고가 소진되었을 때를 강조해주었다. #include #include int main(void) { int stock = 0; // 재고량 int price = 0; // 물품 가격 int order = 0; // 주문량 double vat = 0; // 부가세 double priceWithVat = 0; // 부가세 포함 물품 가격 double priceForOrder = 0;..
부스트코스(Boostcourse) CS50 2주차 C언어 - 문자열
2021. 1. 15. 00:59
스터디&교육/부스트코스 CS50 2기
부스트코스 cs50 c언어 문자열에 대한 강의를 듣고 정리하려고 한다. 지난 강의에서는 C언어 기초인 기본 문법과 사용법에 대해서 공부했었다. 이번 글에서는 C언어에서 문자열을 다루기 위해 어떻게 사용하는지에 대해서 알아보았다. 이번 강의에서는 사용자로부터 문자열을 입력받고 다른 문자열과 합쳐서 출력하는 프로그램에 대해 설명해주고 있다. 문자열 입력 스크래치에서는 ask 란 블록과 say 라는 블록을 합쳐 문자열을 입력받고 말하는 기능을 만들었었다. 그럼 ask 블록과 같이 문자열을 입력받아 say 블록과 같이 문자열을 출력해주는 프로그램을 만들어보자. 지난 시간에 say 블록은 printf 라는 함수를 통해 문자열을 출력해주었다. 그래서 printf 를 통해 hello, world 라는 문자열을 출력해..
부스트코스(Boostcourse) CS50 2주차 C언어 - C 언어 기초
2021. 1. 13. 19:52
스터디&교육/부스트코스 CS50 2기
부스트코스 CS50 2주차 C언어 기초 강의를 듣고 정리하려고 한다. 1주차에서 알려준 스크래치를 사용해서 간단한 프로그래밍을 해볼 수 있지만 텍스트 기반의 프로그래밍 언어를 통해 컴퓨터에게 동일한 일을 하게할 수 있다. 많은 프로그래밍 언어 중 하나인 C 언어에 대해서 알아보는 시간이었다. C 언어 C 는 아주 오래되고 전통적인 순수 텍스트 기반의 언어이다. C 와 같이 프로그래밍 언어는 구체적인 문법(Syntax)를 사용해서 프로그램을 작성해야 한다. 따라서, 문법을 정확하게 사용하지 않으면 에러가 발생한다. 강의에서는 C 에 대한 설명을 위해 스크래치에서 진행했던 실습을 통해 예를 든다. "hello, world" 라는 문구를 출력한다. 스크래치 언어와 C 언어를 통해 비교해보자. "초록색 깃발을 ..