📚 오늘 정리해야 할 개념들
요즘 점점 컴퓨터 시스템과 알고리즘의 기반 개념들이
더 중요하게 느껴져서, 하나씩 정리해두기로 했다.
특히 아래 항목들은 반드시 정확히 이해하고 있어야 한다.
🔐 해시 충돌과 체이닝
- 해시 충돌이란 서로 다른 입력값이 같은 해시값을 가질 때 발생하는 문제다.
- 충돌이 발생하는 원인은 해시 함수의 한계로 인해 서로 다른 키가 같은 인덱스를 가리키게 되는 경우 때문이다.
- 이를 해결하는 방법 중 하나가 체이닝(chaining) 이다.
체이닝은 같은 해시값을 갖는 데이터를 연결 리스트 형태로 이어붙이는 방식으로,
충돌이 발생해도 해당 인덱스에 여러 데이터를 저장할 수 있다.
🧩 병합 정렬과 분할 정복
- 병합 정렬은 분할 정복(Divide and Conquer) 전략을 활용한 정렬 알고리즘이다.
- 리스트를 절반씩 나누고, 정렬한 후 merge 함수에서 두 리스트를 하나로 병합한다.
- 오늘은 특히 비어있던
merge
함수를 채우는 연습을 했다.
🔁 링버퍼 큐의 enque & deque
- 링버퍼를 이용한 큐 구현에서는 인덱스가 한 바퀴 돌 수 있기 때문에,
인덱스 연산을 %
연산자(mod)로 처리한다.
- 비어 있던
enque
, deque
함수를 직접 구현해보면서
포인터 이동과 예외 처리에 대해 다시 복습했다.
🧠 캐시 메모리와 지역성(locality)
- 캐시 메모리는 CPU와 메인 메모리 사이에 있는 작고 빠른 메모리로,
자주 접근하는 데이터를 빠르게 읽기 위해 사용된다.
- 성능이 향상되는 이유는 지역성(locality) 때문이다.
- 시간 지역성: 최근 접근한 데이터에 다시 접근할 가능성이 높음
- 공간 지역성: 인접한 메모리 공간에 접근할 가능성이 높음
🧵 프로세스 vs 쓰레드
- 프로세스는 운영체제에서 실행 중인 하나의 프로그램 단위이며,
쓰레드는 프로세스 내에서 실제 작업을 수행하는 최소 단위이다.
- 프로세스는 독립적인 메모리 공간을 가지지만,
쓰레드는 같은 프로세스 내에서 메모리를 공유한다.
🧠 실력 부족을 실감한 순간
저녁엔 백준 13334번 철로 문제를 풀다가
생각보다 기초가 너무 부족하다는 걸 절실히 느꼈다.
그래서 지금은 정말 말 그대로 헬로월드부터 다시 시작 중이다.
다시 기본기로 돌아가서 탄탄하게 다져야겠다는 생각이다.
코드는 손이 기억하고, 개념은 머리가 기억하고.
🍜 저녁 - 곰탕
