본문 바로가기

CS

[CS 공부 #4] 알고리즘: 가장 효율적인 길을 설계하는 사고의 기술

지난 글에서 우리는 운영체제(OS)를 통해 **“한정된 자원을 어떻게 나눌 것인가”**를 살펴봤습니다.
이제 그 다음 질문이 남았습니다.

“그 자원을 가장 효율적으로 활용하는 법은 무엇일까?”

그 해답을 찾는 학문, 바로 **알고리즘(Algorithm)**입니다.
알고리즘은 단순히 코드를 빠르게 만드는 기술이 아니라,
복잡한 세상 속에서 효율적인 길을 설계하는 사고의 기술입니다.


1️⃣ 효율은 ‘속도’가 아니라 ‘사고의 구조화’다

‘알고리즘’ 하면 대개 복잡한 수식, 그래프, 백준 문제가 먼저 떠오르죠.
하지만 알고리즘의 본질은 코드가 아닙니다.
그것은 문제를 가장 적은 노력과 비용으로 해결하기 위한 구조적 사고의 틀입니다.

컴퓨터과학은 이 사고를 수식으로 표현합니다.
시간 복잡도(Time Complexity) — 즉, ‘얼마나 오래 걸릴까?’를 수치로 나타내죠.
하지만 이건 결국 **“얼마나 덜 낭비할 것인가”**를 정량화한 철학일 뿐입니다.

가령 이런 상황을 생각해볼까요?

회의실은 세 개인데, 회의 요청은 다섯 개다.
누구에게 먼저 자리를 배정해야 할까?

컴퓨터는 이를 스케줄링 알고리즘으로 풉니다.
FCFS(First Come, First Served)는 공정하지만 느리고,
Priority Scheduling은 효율적이지만 중요도가 낮은 일은 끝내 처리되지 않을 수 있죠.

결국 알고리즘은 이렇게 묻습니다.

“무엇을 기준으로 효율을 정의할 것인가?”

이 질문을 세우는 순간, 이미 알고리즘은 시작된 것입니다.


2️⃣ 효율을 설계하는 세 가지 지혜

(1) 탐색 – 길을 잃지 않기 위한 나침반

모든 문제는 ‘방향’을 잃는 순간 복잡해집니다.
탐색 알고리즘은 그 혼란 속에서 질서를 찾아내는 나침반입니다.

  • **선형 탐색(Linear Search)**은 한 칸씩 정직하게 모든 가능성을 확인합니다.
    → 느리지만, 실수를 최소화합니다.
  • **이진 탐색(Binary Search)**은 절반을 과감히 버립니다.
    → ‘가능성이 없는 길’을 지우는 용기 있는 지능입니다.

우리의 사고도 이와 닮았습니다.
모든 아이디어를 붙잡는 대신, 근거 없는 가설을 덜어내고
진짜 핵심으로 좁혀가는 과정.
그게 바로 인간형 탐색 알고리즘이죠.


(2) 정렬 – 우선순위를 세우는 전략

운영체제가 수많은 프로세스를 정렬하듯,
우리의 하루도 ‘무엇을 먼저 할지’ 결정하는 정렬의 연속입니다.

  • 버블 정렬은 느리지만 확실히 한 단계씩 나아가고,
  • 퀵 정렬은 기준(Pivot)을 세워 빠르게 대상을 재배치합니다.

중요한 건 무엇을 기준으로 정렬할 것인가입니다.
백로그를 ‘개발 난이도’로 볼지, ‘사용자 가치’로 볼지에 따라
프로젝트의 효율은 완전히 달라집니다.

정렬은 단순한 기술이 아니라, 사고의 정리 방식입니다.


(3) 최적화 – 모든 선택은 트레이드오프다

복잡한 문제는 단 한 번의 선택으로 해결되지 않습니다.
알고리즘의 세계에서는 이걸 “최적화(Optimization)”라고 부릅니다.

  • **그리디(Greedy)**는 지금 당장 최선을 택합니다.
    빠르지만, 전체를 보지 못할 위험이 있습니다.
  • **동적 프로그래밍(Dynamic Programming)**은
    과거의 결과를 저장(Memoization)해 반복 계산을 줄입니다.
    느리지만, 전체 효율은 오히려 높습니다.

3️⃣ 복잡성(Complexity)을 관리하는 지혜

알고리즘의 성능을 표현할 때 우리는 ‘빅 오(Big O)’ 표기법을 사용합니다.
예를 들어 $O(n^2)$라면, 입력이 10배 커질 때
처리 시간은 100배 늘어난다는 뜻입니다.
이건 단순한 수식이 아니라 **“규모가 커질수록 어떤 사고가 병목이 되는가”**를 보여주는 지표입니다.

효율적인 사고는 곧 확장 가능한 사고입니다.
사람이든 시스템이든, 문제의 규모가 커져도 멈추지 않게 설계하는 것 —
그게 바로 알고리즘적 사고의 진짜 목적이죠.


4️⃣ 결론 – 효율은 기술이 아니라 ‘선택의 철학’이다

알고리즘을 공부한다는 건,
‘컴퓨터처럼 냉정하게 사고하는 법’을 배우는 게 아니라,
‘사람의 복잡한 사고를 얼마나 체계적으로 구조화할 수 있는가’를 배우는 일입니다.

빠르게 가는 것도 중요하지만,
올바른 방향으로 가는 것이 더 중요합니다.

효율은 숫자가 아니라, 선택의 철학입니다.
무엇을 먼저 풀고, 무엇을 버릴지, 그리고 언제 멈출지를 아는 것 —
그 모든 순간이 하나의 알고리즘입니다.