자 이번 포스팅에서는 C/C++ 면접 시 단골질문으로 나오는 C/C++의 동적할당 부분에 대해서 포스팅해 보겠습니다. 먼저 동적 할당이란 프로그램 실행 중에 필요한 메모리를 할당하는 것을 말합니다.반면에 정적 할당은 프로그램이 실행되기 전에 메모리를 할당하는 방법을 말하며, 변수 선언과 같이 컴파일 타임에 메모리 공간이 확정됩니다. C/C++에서는 동적 할당을 위해 malloc/calloc/realloc 함수(C) 또는 new/delete 연산자(C++)를 사용합니다. 동적 할당과 정적 할당의 가장 큰 차이점은 할당 시점과 메모리 영역입니다. 할당 시점: 정적 할당은 컴파일 타임에, 동적 할당은 런타임에 메모리를 할당합니다. 이로 인해 동적 할당은 프로그램이 실행 중에도 메모리를 필요에 따라 할당하거나 ..
Booting Sequence 컴퓨터를 부팅할 때 일어나는 일은 다음과 같습니다: 전원 인가: 컴퓨터의 전원을 켜면, 전기 신호가 메인보드(마더보드)로 전달됩니다. 이 신호는 부팅 프로세스를 시작하기 위한 초기 신호입니다. 기본 입력/출력 시스템 (BIOS) 실행: 컴퓨터의 메인보드에는 BIOS 칩이 있습니다. 전원이 켜지면, BIOS가 실행됩니다. BIOS는 컴퓨터의 하드웨어와 상호작용하며 부팅 프로세스를 관리합니다. POST (Power-On Self Test): BIOS가 실행되면, 주요 하드웨어 구성 요소(메모리, 그래픽 카드, 프로세서 등)가 정상적으로 작동하는지 확인하는 POST가 수행됩니다. 이 단계에서 오류가 발견되면 오류 메시지를 출력하고 부팅이 중단됩니다. 부트로더 로드: POST가 성..
엔디언(Endian) Endian은 데이터를 메모리에 저장하고 표현하는 방식을 말합니다. 컴퓨터의 아키텍처에 따라 다른 방식으로 데이터를 저장할 수 있으며, 이를 리틀 엔디언(Little Endian)과 빅 엔디언(Big Endian)으로 구분합니다. 리틀 엔디언 (Little Endian): 리틀 엔디언은 데이터의 가장 낮은(작은) 자릿수부터 메모리에 저장하는 방식입니다. 가장 작은 단위의 데이터(예: 바이트)가 메모리의 낮은 번지부터 시작하여 순서대로 저장됩니다. 예를 들어, 32비트 정수 0x12345678을 메모리에 저장한다면 다음과 같이 됩니다: 주소: | 0x00 | 0x01 | 0x02 | 0x03 | 값: | 0x78 | 0x56 | 0x34 | 0x12 | 빅 엔디언 (Big Endian..
부동소수점 부동소수점은 컴퓨터 프로그래밍에서 실수를 표현하는 방법 중 하나입니다. C 언어에서는 부동소수점을 표현하기 위해 float과 double 두 가지 데이터 타입을 제공합니다. float: 4바이트 크기를 가지며, 단정밀도 부동소수점을 표현합니다. double: 8바이트 크기를 가지며, 배정밀도 부동소수점을 표현합니다. 부동소수점을 이해하기 위해 몇 가지 중요한 개념을 알아보겠습니다. 1. 정수와의 차이: 정수는 소수 부분이 없는 숫자를 표현하는 반면, 부동소수점은 소수점 이하의 숫자를 표현할 수 있습니다. 예를 들어, 5는 정수이지만 5.0은 부동소수점입니다. 2. 부동소수점 표현 방식: 부동소수점은 다음과 같은 형태로 표현됩니다. 부호(sign) + 가수(mantissa) + 지수(expone..
함수포인터 C 언어에서 함수 포인터(Function Pointer)는 함수를 가리키는 포인터 변수입니다. 다시 말하면, 함수 포인터는 메모리에서 특정 함수의 주소를 저장할 수 있고, 해당 주소를 사용하여 함수를 호출할 수 있게 해 줍니다. 이를 통해 함수를 다른 함수의 인수로 전달하거나, 함수를 동적으로 선택하여 실행할 수 있게 됩니다. 함수 포인터의 선언 방법은 다음과 같습니다: 반환_자료형 (*포인터_변수_이름)(매개변수_자료형1, 매개변수_자료형2, ...); 여기서 반환_자료형은 해당 함수의 반환하는 자료형, 매개변수_자료형1, 매개변수_자료형 2,... 는 해당 함수의 매개변수 자료형들을 나타냅니다. 예를 들어, int를 반환하고 int 매개변수를 한 개 가지는 함수를 가리키는 함수 포인터의 선..
| Substring, Subarray Substring 은 부분 문자열이란 뜻이다. Substring이 Subsequence와 구분되는 가장 중요한 특징은 어떤 문자열 S의 Substring은 연속적이어야 한다는 것이다. Subarray와의 차이점은 단지 문자열인지 배열인지 이다. Ex) 문자열 apple의 전체 Substring apple, appl, pple, app, ppl, ple, ap, pp, pl, le, a, p, l, e, '' | Subsequence Subsequence의 가장 큰 특징은 1. 순서를 유지해야 한다 와 2. 반드시 연속적일 필요는 없다 이다. Subsequence는 Array와 String에 모두 적용되는 개념으로 Substring과 구분 지어서 기억해놓아야 한다. ..
| Merge Sort 병합 정렬 혹은 합병 정렬이라고도 하는 Merge Sort는 시간 복잡도가 O(nlogn)인 비교 기반의 정렬 알고리즘이다. 일반적인 방법으로 구현했을 때 이 정렬은 같은 값일 때 그 순서가 유지되는 안정 정렬에 속한다. 분할 정복 알고리즘의 일종이며, 존 폰 노이만이 1945년에 개발하였다. Merge Sort의 가장 큰 특징은, 임시로 정렬된 부분을 저장할 별도의 공간 n이 필요하다는 점과, 안정 정렬이라는 점이다. 이는 특정 문제를 해결할 때 아주 중요한 포인트가 될 것이다. | 병합 정렬의 구현 병합 정렬은 대부분 Recursive하게 구현하는 것이 이해하기도 쉽고 간단하다. Recursive Style 1 const int LM = 100005; int arr[LM], t..
이 카테고리에서는 단순히 수학적 공식 혹은 지식을 깊게 다루진 않는다. 프로그래밍과 연관 지어서 유용하게 사용할 수 있는 수학적 지식을 다룬다. | Honor's Method 호너의 방법, 호너 메서드, 호너의 법칙 이라고도 하는 Honor's Method는 영국의 수학자인 윌리엄 조지 호너의 이름을 따서 지어진 다항식을 표현하는 방법이다. 위와 같은 다항식이 있을 때 이를 Honor's Method로 표현하면 아래와 같다. Honor's Method로 표현한 위의 다항식을 살펴보면 단순히 x로 묶은 것 그 이상 그 이하도 아니다. 하지만 이를 프로그래밍에서 활용하면 계산량을 많이 줄일 수 있다. 예를 들어 아래와 같은 다항식이 있다고 하자. 이를 단순하게 프로그래밍 한다면 x의 n승을 구하는데 5 + ..
- Total
- Today
- Yesterday
- LeetCode
- 코딩인터뷰
- PS
- 러스트
- 러스트 기초
- 속초
- interview question
- 러스트 입문
- DP
- Problem Solving
- ProblemSolving
- 알고리즘
- Interview
- 트리
- 속초 맛집
- 맛집
- 솔직후기
- 내돈내산
- rust
- 자료구조
- Tree
- 러스트 배우기
- 기술면접
- coding interview
- 반드시 알아야 할 자료구조
- 리트코드
- 인터뷰
- Medium
- algorithm
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |