메모리 - 파일 읽기

이전 게시글에서 파일에 쓰는 프로그램을 작성 했다면, 이번에는 파일의 내용을 읽어서 파일의 형식이 JPEG 이미지인지를 검사하는 프로그램을 작성해보자. 위 코드에서 main 함수를 보면 사용자로부터 입력을 받는 것을 알 수 있다.여기서는 파일의 이름을 입력으로 받을 예

2022년 7월 24일
·
0개의 댓글
·

메모리 - 파일 쓰기

지난 게시글에서 아래 그림과 같은 메모리 구조를 간략하게 배웠었다.다시 복습하면, 머신 코드 영역에는 우리 프로그램이 실행될 때 그 프로그램이 컴파일된 바이너리가 저장된다.글로벌 영역에는 프로그램 안에서 저장된 전역 변수가 저장된다.힙 영역에는 malloc으로 할당된

2022년 7월 24일
·
0개의 댓글
·

메모리 - 메모리 교환, 스택, 힙

아래와 같은 코드가 있다. 함수 swap은 정수 a와 b를 입력받아 그 값을 바꾸는 일을 수행한다.main 함수에서는 x에 1, y에 2를 입력하고 swap 함수를 통해 그 두 값을 바꾸려고 하고 있다.과연 의도대로 잘 바뀌어서 출력이 될까?위 코드를 컴파일하고 출력해

2022년 7월 23일
·
0개의 댓글
·

메모리 - 메모리 할당과 해제

malloc 함수를 이용하여 메모리를 할당한 후에는 free라는 함수를 이용하여 메모리를 해제해줘야 한다.그렇지 않은 경우 메모리에 저장한 값은 쓰레기 값으로 남게 되어 메모리 용량의 낭비가 발생하게 되기 때문이다.이러한 현상을 ‘메모리 누수’라고 일컫는다.valgri

2022년 7월 23일
·
0개의 댓글
·

메모리 - 문자열 복사

문자열을 복사하기 위해 아래 코드를 실행하면 어떻게 될까?사용자에게 입력값을 받아 string s에 저장하고, string t를 s로 정의한다.그리고 t의 첫 번째 문자를 toupper 함수를 이용하여 대문자로 바꾼다면 s와 t는 각각 어떻게 출력 될까?입력값으로 “e

2022년 7월 23일
·
0개의 댓글
·
post-thumbnail

GitHub Gist 사용법

깃허브 로그인을 해야 한다. (회원이 아닐 경우 회원가입)본 게시물은 Visual Studio Code를 기준으로 작성하였습니다. (사용자 환경에 따라 다를 수 있음)(현재 작성자의 GitHub Gist)본인의 GitHub Gist 페이지 우측 상단 '+' 버튼을 클릭

2022년 7월 17일
·
0개의 댓글
·

메모리 - 문자열 비교

위 코드를 실행하면, s라는 포인터의 값, 즉 “EMMA”라는 문자열의 가장 첫 값인 “E”에 해당하는 메모리 주소를 출력하게 될 것이다. 그렇다면 아래 코드들은 무엇을 출력할까?s가 가리키는 곳을 시작으로 “EMMA”라는 문자열로 이루어진 문자들의 배열이 있으니, 각

2022년 7월 16일
·
0개의 댓글
·

메모리 - 문자열

우리는 이전 게시물들에서 여태껏 문자열을 저장하기 위해 CS50 라이브러리에 포함된 string 자료형을 사용하였다.아래와 같이 s에 “EMMA”라는 값을 저장한다고 생각해보자.문자열은 결국 문자의 배열이고, s0, s1, s2, … 와 같이 하나의 문자가 배열의 한

2022년 7월 16일
·
0개의 댓글
·

메모리 - 포인터

지난 게시글에서 배웠던 ‘\*’ 연산자는 어떤 메모리 주소에 있는 값을 받아오게 해주었다.이 연산자를 이용해서 포인터 역할을 하는 변수를 선언할 수도 있다.위 코드를 보면 정수형 변수 n에는 50이라는 값이 저장되어 있다.그리고 \*p라는 포인터 변수에 &n 이라는 값

2022년 7월 16일
·
0개의 댓글
·

메모리 - 메모리 주소

컴퓨터과학에서는 숫자를 10진수나 2진수 대신 16진수(Hexadecimal)로 표현하는 경우가 많다. 컴퓨터에서 데이터를 처리하기 위해 16진수를 사용할 때 장점이 있기 때문이다. 16진수와 일상생활에서 우리가 사용하는 10진수와 비교하면 그 차이를 알 수 있다. 1

2022년 7월 15일
·
0개의 댓글
·

알고리즘 - 병합 정렬

지난 게시글들에서 다양한 정렬 방법에 대해서 배웠다.하지만 우리가 아직 공부하지 않은 대표적인 정렬 방법이 하나 더 있다.전화번호부의 분할 정복 탐색처럼 데이터를 반으로 나누어간다는 것과 공통점이 있는 방법인 병합 정렬(합병 정렬)이 있다.병합 정렬은 원소가 한 개가

2022년 7월 15일
·
0개의 댓글
·

알고리즘 - 재귀

함수를 사용할 때 어디에서 호출했는가? main 안에서 프로그램을 작성하면서 필요한 순간에 호출하여 사용용했었다.그런데 main 역시 함수라는걸 기억하자. main이라는 함수 안에서 또 다른 함수를 사용한 것이다.이 사실을 알게 되었을 때, 우리는 함수가 본인 스스로를

2022년 7월 15일
·
0개의 댓글
·

알고리즘 - 정렬 알고리즘의 실행시간

여태까지 배운 선형 검색, 이진 검색, 버블 정렬, 선택 정렬의 실행시간은 각각 어떻게 되는지 정리해 보자.O(n^2): 선택 정렬, 버블 정렬O(n log n)O(n): 선형 검색O(log n): 이진 검색O(1)Ω(n^2): 선택 정렬, 버블 정렬Ω(n log n)

2022년 7월 15일
·
0개의 댓글
·

알고리즘 - 선택 정렬

보통 배열이 정렬되어 있으면 정렬되지 않은 배열보다 더 쉽게 탐색할 수 있다.정렬을 위한 알고리즘 중 선택정렬을 배열 안의 자료 중 가장 작은 수(혹은 가장 큰 수)를 찾아 첫 번째 위치(혹은 가장 마지막 위치)의 수와 교환해주는 방식의 정렬이다.선택 정렬은 교환 횟수

2022년 7월 15일
·
0개의 댓글
·

알고리즘 - 버블 정렬

정렬되지 않은 리스트를 탐색하는 것 보다 정렬한 뒤 탐색하는 것이 더 효율적이다.정렬 알고리즘 중 하나로는 버블 정렬이 있다.버블 정렬은 두 개의 인접한 자료 값을 비교하면서 위치를 교환하는 방식으로 정렬하는 방법을 말한다.버블 정렬은 단 두 개의 요소만 정렬해주는 좁

2022년 7월 15일
·
0개의 댓글
·

알고리즘 - 선형 검색

찾고자 하는 자료를 검색하는 데 사용되는 다양한 알고리즘이 있다. 그 중 하나가 선형 검색이다.선형검색은 원하는 원소가 발견될 때까지 처음부터 마지막 자료까지 차례대로 검색한다.이렇게 하여 선형 검색은 찾고자 하는 자료를 찾을 때까지 모든 자료를 확인해야 한다.선형 검

2022년 7월 15일
·
0개의 댓글
·

알고리즘 - 알고리즘 표기법

이전 게시물 중에 아래 그림과 같이 알고리즘을 실행하는데 걸리는 시간을 표현해 본 적이 있었다.위와 같은 그림을 공식으로 표기한 것이 Big O 표기법이다.여기서 O는 “on the order of”의 약자로, 쉽게 생각하면 “~만큼의 정도로 커지는” 것이라고 볼 수

2022년 7월 15일
·
0개의 댓글
·

알고리즘 - 검색 알고리즘

배열은 한 자료형의 여러 값들이 메모리상에 모여 있는 구조이고, 컴퓨터는 이 값들에 접근할 때 배열의 인덱스 하나하나를 접근한다.만약 어떤 값이 배열 안에 속해 있는지를 찾아 보기 위해서는 배열이 정렬되어 있는지 여부에 따라 아래와 같은 방법을 사용할 수 있다.배열의

2022년 7월 15일
·
0개의 댓글
·

배열 - 명령행 인자

우리가 여태껏 많이 사용해온 main 함수를 보다 자세히 들여다보자.main도 그 형태를 보면 하나의 함수임을 알 수 있는데, 이젠 더이상 main() 안에 기계적으로 void 라고 입력하는 대신 아래 코드와 같이 argc, argv를 정의해보자.여기서 첫번째 변수 a

2022년 7월 15일
·
0개의 댓글
·

배열 - 문자열의 활용

사용자로 부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들어 보자.간단하게 for 루프를 통해 문자열의 인덱스를 하나씩 증가시켜가면서 해당하는 문자를 출력하면 될텐데, 문자열의 끝은 어떻게 알 수 있을까?저번 게시글에서 배운 방법으로는 인덱스의 문자가 널 종단

2022년 7월 15일
·
0개의 댓글
·