
short, int, long, signed, unsigned 등) 지원| 항목 | C | Python |
|---|---|---|
| 실행 방식 | 컴파일러 | 인터프리터 |
| 정수형 크기 | 아키텍처 의존 | 기본적으로 22B 이상 (큰 오버헤드) |
| 메모리 효율 | 높음 | 낮음 |
| 타입 수 | 다양 | 상대적으로 단순 |
예시: 카메라 같이 메모리 제약이 있는 디바이스에서는 C가 훨씬 적합!
int: 4B (일반적으로)short: 2Bchar: 1Bpointer: 아키텍처에 따라 4B 또는 8B (32bit vs 64bit)#include <stdio.h>
printf("%zu", sizeof(int));if(x = y) // 의도는 비교지만, 대입임!
y = x/*p // => 뒤가 주석 처리됨 (의도치 않은 결과)
if(flags & FLAG != 0) // 우선순위 실수
if((flags & FLAG) != 0)while(c = getc(in) != EOF)
putc(c, out);
while((c = getc(in)) != EOF)
putc(c, out);#define SQUARE(x) x * x
SQUARE(1 + 2) // 1 + 2 * 1 + 2 = 5 ??
#define SQUARE(x) ((x) * (x))int n = 10;
int *p = &n;
int *p = (int*)malloc(sizeof(int) * 5);
malloc(20)은 20바이트 요청이지만,sizeof 사용 필수malloc은 void* 반환 → 적절한 타입으로 캐스팅 필요p + 1은 p가 가리키는 타입 크기만큼 이동struct Example {
int a;
char b;
double c;
};
switch 문에서는 break 필수else는 가장 가까운 if에만 붙는다if (a && b) {...}a가 false면 b는 아예 평가하지 않음결국, clarity가 중요하다는 핵심...
균형을 잡는데는 이유가 다 있다.
한쪽으로 치우친 트리인 경우 O(N)의 탐색 시간, 이를 RB TREE로 균형 잡으면 O(log N)으로 단축 시키니까 쓰는 것.
존재하지 않음자녀가 없다면, 자녀를 NIL로 표시RB 트리에서 LEAF 노드는 NIL노드 X에서 임의의 NIL 노드까지 내려가는 경로에서의 BLACK노드 개수결국 삽입에서 회전을 하고 색을 바꾸는 그 과정은 저 Black Height가 성립하지 않기 때문.
루트를 블랙으로 변경블랙을 삽입시, 임의의 NIL 노드까지ㅏ 가는 경로에 블랙이 추가, 5번 속성이 자연스럽게 위반, 따라서 레드 넣어서 이를 방지
부모와 할아버지의 색 교환 + 할아버지 기준 오른쪽 회전
삽입된 RED
오른쪽 자녀부모 기준 왼쪽 회전 + 부모와 할아버지의 색 교환 + 할아버지 기준 오른쪽 회전(CASE3)
REDRED부모와 부모 형제 노드 색 변경 + 할아버지 색 변경 + **할아버지 노드**에서 다시 확인 시작
이걸 내가 코드로 구현할 수 있을까...?
아쉬운 점은 진짜 너무 아쉽네