프로그래밍25 알고리즘 - 정렬 (C/C++) 정렬(Sorting)이란?정렬이란 데이터를 일정한 순서(오름차순, 내림차순 등) 로 재배치하는 과정이다.정렬은 탐색, 이진탐색, 통계 분석 등 다양한 알고리즘의 전처리 과정(데이터 분석을 위해 데이터를 가공하는 단계)으로 활용되며, 효율적인 알고리즘 설계의 기초가 된다.정렬 알고리즘의 성능정렬 알고리즘을 비교할때는 보통 다음 요소들을 본다.시간 복잡도: 최악 / 평균 / 최선공간 복잡도: 추가 메모리 사용 여부정렬의 안정성: 동일한 값의 원소들이 정렬 전 순서가 유지되는지 여부제자리 정렬(in-place) 여부 : 추가적인 메모리 공간이 필요하지 않았을때 동작 여부 1. 버블 정렬가장 직관적인 정렬 방식으로, 인접한 두 수를 비교하여 큰 값을 뒤로 보내는 방식이다.아마 대부분의 언어에서 정렬을 배울때 .. 2025. 5. 6. 시간 복잡도에 대해 알아보자 시간 복잡도란 무엇인가?시간 복잡도(Time Complexity)는 알고리즘의 실행 시간이 입력 데이터의 크기와 어떻게 변하는지를 수학적으로 분석한 것이다.알고리즘의 효율성 및 최적화 등을 평가할 때 사용되며, 프로그램이 실행되는 데 걸리는 시간을 예측할 수 있다.만약 컴퓨터가 초월적인 존재라 어떤 스파게티 코드를 짜든 항상 빠른 성능을 보여준다면 아무리 비효율적인 코드라고 해도 일단 작동된다면 사용했을것이다. (물론 가독성은 중요하다!)하지만 컴퓨터는 한정된 공간과 연산 속도를 가졌고 이를 효율적으로 사용하기 위해서는 최적화된 알고리즘을 사용해야하며 이 알고리즘을 시간 복잡도를 통해 분석하는 것이다. 시간 복잡도 분석의 필요성성능 평가동일한 문제를 해결하는 여러 알고리즘 중, 실행 시간이 짧고 효율적인.. 2024. 12. 10. 동적 계획법(DP) 에 대해 알아보자 동적 계획법(Dynamic Programing)동적 계획법은 복잡한 문제를 풀기 위한 알고리즘 설계 기법 중 하나로, 문제를 작은 하위 문제(subproblem)로 나누고, 이 하위 문제의 해를 재활용하여 전체 문제를 푸는 방법이다.이러한 동적 계획법은 분할 정복(Divide & Conquer) 알고리즘과 매우 유사한데 큰 문제를 작은 하위 문제로 나눈다는 공통점이 있다. 차이점이라면 작은 하위 문제로 나눈때 독립된 하위 문제로 나눌것인지(분할 정복), 중복되는 하위 문제로 나눈것인지(동적 계획법)에 차이가 있다.핵심 개념동적 계획법의 중요한 개념은 다음과 같다.최적 부분 구조(Optimal Substructure) 하위 문제의 해가 큰 문제의 해를 구할 수 있어야 한다예: 피보나치 수열 F(n)=F(n.. 2024. 11. 21. C언어 - 동적할당 개요c언어에서 우리가 변수 혹은 함수를 선언하면 컴퓨터는 메모리에 해당되는 영역의 크기를 미리 세팅해 놓는다.(이를 정적할당이라고 한다.) 따라서 프로그램 시작 시 영역의 크기가 정해지고 그 크기를 런타임(실행 중)에는 사용자가 임의로 변경할 수 없어 곤란한 상황이 있을 수 있다. 이러한 상황에 할당된 영역의 크기를 변경할 수 있도록 돕는 것이 동적 할당이라는 개념이다.오늘은 동적 할당에 대해 알아 보자 동적할당 (Dynamic Memory Allocation)의 정의 c언어에서 동적할당 (Dynamic Memory Allocation)은 프로그램 실행 중에 메모리를 요청하고, 더 이상 필요하지 않을 때 해당 메모리를 해제하는 것을 의미한다. 정적 할당(컴파일 시점에 메모리가 할당되는 방식)과 달리, 동.. 2024. 10. 22. C언어 - 포인터 개요포인터는 변수 혹은 함수의 주소값을 가지고있는 자료형이다. 즉 포인터는 주소 그 자체라고 할 수 있다.따라서 포인터를 통해 메모리상의 특정 위치에 직접 접근하고 데이터를 조작할 수 있다.오늘은 포인터의 개념과 선언 및 초기화, 사용법에 대해 알아보자 포인터란 무엇인가?포인터는 변수나 함수가 저장된 메모리 주소를 가리키는 변수이다. 일반적인 변수는 특정 데이터를 저장하지만, 포인터는 다른 변수나 함수의 메모리 주소를 저장한다. 먼저 변수는 메모리의 실제 데이터가 있는 파트에 기록되며 주소목록파트의 주소를 가진다. (이전 글 참조)2024.05.04 - [프로그래밍/C언어] - C언어 - 변수와 자료형 C언어 - 변수와 자료형오늘은 C언어의 변수와 자료형, 그 중에서도 기본 자료형에 대해 다뤄보고자 한.. 2024. 9. 5. C언어 - 지역 변수와 전역 변수, 정적 변수 개요C언어에서 변수를 선언하면 그 변수의 데이터가 메모리에 저장된다. 이때 변수를 선언한 위치와 특정 문법에 따라 저장된 데이터의 생존시간(lifetime)에 영향을 주게 된다. 이는 프로그램의 메모리 운용 방식과 유지 보수 및 효율성에 매우 중요하다.오늘은 선언위치에 따른 변수의 종류 4가지를 알아보자 1. 지역 변수지역 변수는 함수나 블록( 중괄호 {}를 뜻한다. ) 내부에서 선언된 변수로, 선언된 블록 내에서만 접근할 수 있다. 이 변수는 함수나 블록이 실행되는 동안에만 메모리에 존재하며, 해당 블록이 종료되면 자동으로 메모리에서 해제된다.즉 블록이나 함수를 벗어나게되면 메모리에 지워지므로 그 변수에 접근을 할 수가 없게 된다.스택 영역에 저장된다. 스택 영역이 뭔지 모르겠다면2024.05.28 -.. 2024. 9. 4. 이전 1 2 3 4 5 다음