전체 글 143

TIL 2025 03 25 CS50 / 버블 정렬 (Bubble Sort)

목차1. 버블 정렬2. 버블 정렬 과정3. 버블 정렬 의사 코드 (Pseudo Code)4. 실행 시간5. 버블 정렬의 특징6. 적용 추천 케이스 및 정리    1. 버블 정렬 버블 정렬은 두 개의 인접한 요소를 비교하면서 위치를 바꾸는 방식으로 동작하는 정렬 알고리즘. 이 과정에서 큰 숫자가 점차 뒤쪽으로 이동하면서 거품이 떠오르는 듯한 모습을 보이기 때문에 ‘버블 정렬’이라는 이름이 붙었다.   2. 버블 정렬 과정 예제: 8개의 숫자 정렬초기 배열: [6, 3, 8, 5, 2, 7, 4, 1]첫 번째 패스 (배열의 끝까지 진행하며 인접한 값 비교 및 교환)(6, 3) 비교 → 교환 → [3, 6, 8, 5, 2, 7, 4, 1](6, 8) 비교 → 교환 X(8, 5) 비교 → 교환 → [3, 6, ..

카테고리 없음 2025.03.25

TIL 2025 03 24 CS50 / 선형 검색 (Linear Search)

목차1. 선형 검색 (Linear Search)2. 문자열 검색3. 구조체를 활용한 검색   개요주어진 배열에서 특정 값을 찾기 위한 검색 알고리즘 중 하나.여러 개의 배열이 존재하는 경우, 특정 속성값을 검색하고 그에 해당하는 값을 출력하는 방법과 이를 더 확장성 있게 구현하는 방법 학습. 핵심 개념선형 검색구조체 (Struct)  1. 선형 검색 (Linear Search)  선형 검색은 배열의 첫 번째 요소부터 마지막 요소까지 순차적으로 탐색하며 원하는 값이 있는지 확인하는 방법이다.최선의 경우: 찾고자 하는 값이 배열의 첫 번째 요소에 위치 → 1번만 검사.최악의 경우: 찾고자 하는 값이 배열의 마지막 요소이거나 존재하지 않는 경우 → 배열의 모든 요소를 검사.시간 복잡도: O(n) 기본적인 선형..

카테고리 없음 2025.03.24

TIL 2025 03 23 CS50 / 알고리즘 실행 시간과 Big O 표기법

목차1. 알고리즘 실행 시간과 Big O 표기법2. 핵심 개념3. 실행 시간 비교 및 고려사항   1. 알고리즘 실행 시간과 Big O 표기법 들어가기 전에 프로그램을 실행할 때 실행 시간이 중요. 간단한 프로그램은 실행 시간이 짧지만, 데이터가 많아지고 작업이 복잡해질수록 실행 시간이 크게 증가. 따라서 특정 알고리즘의 실행 시간을 평가하는 방법을 이해하는 것이 중요.   2. 핵심 개념 2-1. Big O 표기법 Big O 표기법은 알고리즘 실행 시간의 "상한"을 나타냄. 즉, 최악의 경우에도 알고리즘이 얼마나 오래 걸릴지를 분석하는 방식임.O(n): 입력 크기(n)에 비례하여 실행 시간이 증가 (예: 선형 검색)O(n^2): 입력 크기에 대해 제곱 비례하여 실행 시간이 증가 (예: 버블 정렬)O(n..

카테고리 없음 2025.03.23

TIL 2025 03 22 CS50 / 검색 알고리즘

목차1. 검색 알고리즘  1. 검색 알고리즘 들어가기 전에지난 강의는, 메모리 구조, 자료형, 배열과 같은 기초 개념 학습.이제부터는 이를 활용한, 검색이나 정렬과 같은 문제를 해결하는 알고리즘 학습.우선, 배열에서 특정 값을 찾는 방법부터 시작. 핵심 개념선형 검색 (Linear Search)이진 검색 (Binary Search)  2. 배열과 검색 배열은 동일한 자료형의 여러 값이, 메모리에 연속적으로 저장된 구조.컴퓨터는 배열의 각 요소에 접근할 때 인덱스를 사용하며, 특정 값을 찾기 위해 배열을 순차적으로 탐색하거나 특정 알고리즘을 활용 가능.배열의 정렬 여부에 따라 사용할 수 있는 검색 방법이 달라짐. 3. 선형 검색 (Linear Search)정렬 여부와 상관없이 사용할 수 있는 방법.배열의 ..

카테고리 없음 2025.03.22

TIL 2025 03 21 CS50 / 명령행 인자

목차1. 명령행인자  1. 명령행 인자make나 clang과 같은 프로그램을 실행할 때 컴파일하고자 하는 코드 외에도, 컴파일 후 저장하고자 하는 파일명과 같이 추가적인 정보를 함께 제공 가능한 정보들. 핵심 개념명령행 인자 (Command-line Arguments)argv (Argument Vector)argc (Argument Count) 1-1. 코드 분석 및 실행 예시C 언어에서 main 함수는 기본적으로 int main(void) 형태로 작성했지만, 명령행 인자를 활용하기 위해 다음과 같이 변경 가능.#include #include int main(int argc, string argv[]){ if (argc == 2) { printf("hello, %s\n", argv..

카테고리 없음 2025.03.21

TIL 2025 03 20 CS50 / 문자열의 활용

목차1. 문자열 길이 탐색 및 출력2. 문자열 변환 (소문자를 대문자로)3. toupper() 활용한 문자열 변환       1. 문자열 길이 탐색 및 출력 문자열의 끝을 알기 위해 문자열을 한 글자씩 출력하는 두 가지 방법을 사용 가능. 널 종단 문자('\0')를 검사하여 루프를 종료하는 방식strlen() 함수를 사용하여 문자열의 길이를 미리 구하고 루프를 수행하는 방식 strlen()을 사용하여 문자열을 출력#include #include #include int main(void){ string s = get_string("Input: "); printf("Output:\n"); for (int i = 0, n = strlen(s); i 코드 설명get_string("Input: "..

카테고리 없음 2025.03.20

TIL 2025 03 19 CS50 / 문자열과 배열

목차1. 문자열(string)과 문자(char) 배열2. 문자열 배열3. 널 종단 문자(\0)의 역할  1. 문자열(string)과 문자(char) 배열평소에 사용했던 string 자료형은 사실 char 자료형의 배열로 정의 됨.예를 들어, 아래와 같은 문자열이 있다고 가정.string s = "HI!";이 문자열 s는 메모리에서 다음과 같이 저장. 가장 마지막의 \0(널 종단 문자, Null Terminator)은 문자열의 끝을 나타냄.이는 모든 비트가 0인 1바이트의 특수 문자로, C에서는 이를 통해 문자열이 어디까지인지 구분.   2. 문자열 배열문자열을 여러 개 저장하고 싶을 때, 문자열 배열을 사용 가능.string names[4];names[0] = "EMMA";names[1] = "RODRI..

카테고리 없음 2025.03.19

TIL 2025 03 18 CS50 / 배열 (Array)

목차1. 배열의 개념과 활용2. 배열의 동적 활용    1. 배열의 개념과 활용1-1. 메모리와 변수C에서 특정 자료형의 변수를 선언하면 메모리상 특정 크기의 공간을 차지.다양한 자료형의 크기:bool: 1바이트char: 1바이트int: 4바이트float: 4바이트long: 8바이트double: 8바이트string: x바이트 (가변적) 1-3. 배열이 필요한 이유개별 변수로 선언하면 값이 많아질수록 관리가 어려움.같은 자료형의 데이터를 연속된 메모리 공간에 저장하는 배열(Array)을 사용하면 효율적. 1-4. 배열의 선언과 사용#include #include int main(void){ // 배열 선언 및 초기화 int scores[3]; scores[0] = 72; scores[..

카테고리 없음 2025.03.18

TIL 2025 03 17 CS50 / 코드의 디자인과 고무오리 디버깅

목차1. 코드의 디자인    1. 코드의 디자인 들어가기 전에규모가 큰 프로그램을 개발할 때는 여러 명이 함께 협업하는 경우가 많다.따라서 내가 작성한 코드가 전체 프로그램의 오류를 유발하지 않도록 주의 필요.또한 코드의 가독성과 유지보수성을 고려하여 일관된 스타일을 유지하는 것이 중요.결론적으로 코드의 정확성과 디자인을 효율적으로 관리하는 방법 학습 학습 목표코드의 정확성을 검증하는 방법 이해.코드 스타일을 통일하는 방법 습득.논리적 오류를 찾는 방법 학습. 핵심 개념 1. 코드의 정확성 검사: check50check50 프로그램을 사용하면 코드의 정확성을 자동으로 검사 가능.이는 CS50 강의에서 제공되는 도구지만, 실제 개발 환경에서도 유사한 자동 검사 도구를 사용하여 코드의 정확성을 검토 가능.대..

카테고리 없음 2025.03.17

TIL 2025 03 16 CS50 / 컴파일링과 디버깅

목차1. 컴파일링2. 디버깅     1. 컴파일링 (Compiling) 들어가기 전에 C 언어로 작성된 소스 코드를 실행하려면 컴파일링이 필요.텍스트 형식의 코드가 컴퓨터가 이해할 수 있는 기계어로 변환되는 과정에서 어떤 단계를 거치는지 확인. 학습 목표컴파일링의 네 단계를 설명 가능. 핵심 단어컴파일링어셈블링링킹 1-1. 컴파일링 과정 컴파일 과정은 다음 네 단계로 이루어진다. 1) 전처리 (Preprocessing)C 코드에서 #include 같은 전처리 지시문을 처리하는 단계입니다. 헤더 파일을 포함하는 등 코드 변환이 이루어집니다. 2) 컴파일링 (Compiling)전처리된 코드를 어셈블리어로 변환하는 과정.컴파일러가 고급 언어를, 저수준 언어인 어셈블리어로 변환. 3) 어셈블링 (Assembli..

카테고리 없음 2025.03.16