Skip to content
뒤로가기

알고리즘은 왜 푸는걸까?

게시된 날짜:  at 
알고리즘은 왜 푸는걸까?(알콰리즈미, 개인의 관점, 기업의 관점) 이미지

매일 알고리즘을 풀던 중, 물리학자 김상욱 교수의 말 중 역사를 알면 더 꾸준히 할 수 있다는 말(10:34~12:07)이 떠올라 곧바로 행동으로 옮겨, 알고리즘의 역사를 이해하고, 왜 알고리즘 문제를 푸는지, 실력은 어떻게 키울 수 있는지 등을 조사해 다른 사람들과 공유하고자 이 글을 쓰게 되었다.

원래도 역사나 본질적인 질문을 탐구하는걸 좋아해서 이번 조사도 즐기면서 할 수 있었다. 내 나름대로 지엽적인 정보는 최소화하고 여러 아티클, 위키 등을 참고해 핵심 내용만 간단하게 정리했으니 참고하길 바란다.

(이 글은 노션에서 처음 작성되었으며, 노션의 원문 스타일이 네이버 블로그에 완전히 적용되지 않아, 일부 가독성이 떨어질 수 있는 점 양해 부탁드립니다.)


알고리즘이란 무엇이고, 어디서부터 시작되었을까?

알고리즘이란 무엇일까? 간단히 말하면 문제를 해결하거나 계산을 수행하기 위한 유한하고 명확한 절차를 의미한다.

우리가 알고리즘 문제를 풀 때, 먼저 아이디어를 바탕으로 의사코드를 작성하고, 이를 실제 프로그래밍 언어로 옮겨 구현하는데 이 모든 과정이 곧 알고리즘이다.

그렇다면 “알고리즘”이라는 단어 자체는 어디서 유래한 걸까? 그건 바로 페르시아의 수학자 알콰리즈미의 이름에서 비롯되었다. 그가 저술한 책에서는 인도식 숫자 체계(즉, 우리가 현재 사용하는 0~9의 숫자)와 이를 활용한 산술 계산법을 소개했는데, 이 책이 유럽으로 전파되면서 그의 이름 “algorismi”가 곧 계산 절차를 의미하는 일반 명사로 사용되기 시작했다.

샌드위치가 원래는 백작의 이름이었지만 지금은 모두가 아는 음식 이름이 된 것처럼, 알고리즘도 한 사람의 이름이 일반 명사로 변해 오늘날까지 쓰이게 된 경우라고 볼 수 있다.

즉, 알고리즘은 단순히 프로그래밍 개념이 아니라, 문제를 체계적으로 해결하는 사고의 방식으로써 오랜 역사를 가지고 발전해온 개념이다.


알고리즘을 왜 풀어야 하는걸까?

알고리즘의 역사를 살펴보았으니, 이 글을 쓰게 된 근본적인 질문으로 돌아가보자 알고리즘은 왜 풀어야 하는걸까? 단순히 문제 해결 능력을 기르기 위해서일까? 아니면 원하는 기업의 코딩 테스트를 통과하기 위해서일까? 그렇다면 시선을 바꿔, 우리가 학생때 자주 듣던 출제자의 시각으로 생각해보자 기업에서는 왜 알고리즘 코딩 테스트를 보는걸까?

여러 아티클을 참고하며 정리한 바로, 이 질문들에 대한 답은 크게 두 가지 관점으로 정리할 수 있었다.

  1. 개인의 관점 (실력 향상)
  2. 기업의 관점 (판단 지표, 이윤 추구)

1. 개인의 관점 (실력 향상)

개인의 관점에서 알고리즘을 푸는 이유는 단순히 취업을 위한 수단이 아닌, 장기적 관점에서 더 나은 개발자로 성장하기 위한 핵심 역량을 키워주기 때문이다.

따라서, 알고리즘 공부의 목적을 정답을 맞추는 것에 두는 게 아니라, 문제를 푸는 과정에서 사고력을 기르고 문제를 대하는 태도를 훈련하는데 둬야 한다.(실무 곳곳에서 필요로 하는 역량들이다.)

결국에, 알고리즘을 잘 푼다는 건 단순히 코딩 테스트를 통과하는 것 이상으로, 더 나은 구조 설계, 효율적인 성능으로 리팩터링, 가독성 좋은 코드를 만들 수 있도록 도와준다.

또한 좋은 알고리즘 코드는 아래 같은 요소들을 종합적으로 판단해야 하는데, 이 요소들을 고려하다 보면 결국엔 좋은 개발 습관을 만들 수 있다.

  1. 얼마나 깔끔하게 코드를 작성했는지
  2. 변수명은 명확한지
  3. 시간, 공간 복잡도를 고려했는지
  4. 예외 케이스는 잘 다뤘는지

이런 요소를 고려해 알고리즘을 풀다보면, 코딩 실력 향상은 물론 문제를 정리하고 개발자의 의도를 코드로 명확히 전달할 수 있는 의사소통 능력까지 함양할 수 있다.


2. 기업의 관점 (판단 지표, 이윤 추구)

그렇다면 이번엔 기업의 관점에서 파악해보자.

기업에서 코딩 테스트를 중요하게 여기는 이유는 단순히 지원자의 지적 능력이나 전공 지식을 평가하기 위해서가 아니다. 오히려 특정 기술 스택이나 프레임워크 숙련도를 넘어서, 사고력과 논리력, 문제 해결 능력, 코드의 정확성과 표현력 등 개발자로서의 종합적인 역량을 평가하기 위해서이다.

더 나아가, 기업 입장에서 알고리즘을 잘 푼다는 건 달리 말해, 비용을 절감하고 성능 최적화를 통해 이윤을 극대화할 수 있는 실력을 갖췄다는 걸 말한다.

아래에서 조금 더 자세히 알아보자.


1. 지원자에 대한 판단지표

최근 사용되는 프레임워크 등은 높은 수준의 추상화를 제공하기 때문에 관련 질문만으로는 지원자의 실제 기술 역량을 파악하기 어렵다. (단순히 사용했을 수도, 면접에 대비한 단순 암기일 수도 있기 때문이다.)

따라서 보다 분별력있는 판단지표가 필요한데 그때 사용되는게 알고리즘이다. 알고리즘(+ 자료구조)은 단순 암기만으로 해결이 어렵고, 제한된 시간 내 사고하고 구현하는 역량을 볼 수 있기 때문이다. 더불어, 기업에선 주로 아래 능력을 가진 개발자를 선호하고, 특히 1~2번을 알고리즘 문제로 평가하기가 매우 적절하다.

  1. 복잡한 문제를 분석하고, 자료구조와 알고리즘을 이용해 논리적으로 해결할 수 있는 사람
  2. 그 해결책을 깔끔한 코드로 구현할 수 있는 사람
  3. 시스템의 내부 동작을 이해하고, 프레임워크의 구조까지 알고 있는 사람
  4. 지금 다루는 기술 스택에 경험이 있는 사람
  5. 조직 문화에 잘 어울리는 사람

2. 기업의 이윤 추구

우리 모두가 알듯이, 기업은 학교가 아니다. 영리를 목적으로 한다. 따라서 성능 향상 → 비용 절감 → 이윤 증가라는 연결 고리가 성립된다.

특히, 많은 테크 기업은 기능 하나하나가 수십억 건의 데이터, 수백~수십만 명의 사용자를 상대해야 한다. 이런 환경에서 비효율적인 알고리즘은 기업에 막대한 손실을 입힐 수 있다.

정렬 알고리즘에 따른 서버 성능 예시를 살펴보자. (입력 데이터: 1,000,000개)

연산 속도사용한 정렬결과
서버 A초당 10¹⁰번 연산 (빠름)버블 정렬O(n²)의 시간복잡도 → 약 100초 소요
서버 B초당 10⁸번 연산 (느림)병합 정렬O(n log n)의 시간복잡도 → 약 1초 소요

서버 A 자체의 연산 속도는 B보다 뛰어나지만 어떤 알고리즘을 선택했느냐에 따라 결과가 대비되는 걸 볼 수 있다. 즉, 알고리즘이 효율적이면 하드웨어 성능을 압도한다는 뜻이 된다.

물론, 서버의 성능을 높이기 위해 CPU나 RAM을 추가할 수도 있다. 그렇지만 그건 상수 수준(constant factor)의 개선에 불과하고, 비용도 많이 발생한다.

따라서 위의 예시처럼 효율적인 알고리즘을 사용하면 입력 크기에 따라 성능을 훨씬 더 크게 개선할 수 있다. (O(n²)에서 O(n log n)으로 바꾸는 것만으로도 수십 배, 수백 배 차이가 난다.)

(추가적으로, 알고리즘에 대한 이해가 깊은 개발자라면 설계 단계부터 효율성과 확장성을 고려한 구조를 만들 수 있으니, 장기적으로 비용 절감과 기술 부채를 감소시키는 핵심 역할을 맡을 수 있는 인재라는 뜻이기도 하다.)


참고

알고리즘은 실무의 다양한 분야에 스며들어 있다.

  1. 네트워킹 성능 향상 → 라우팅 알고리즘
  2. 보안 → 암호화/복호화 알고리즘
  3. 부하 분산 → 로드 밸런싱 알고리즘

그 외에도 인코딩, 파싱, 캐싱, 스케줄링 등 수많은 실무 기능에 알고리즘이 핵심 역할을 담당하고 있다. (즉, 직접 알고리즘을 짜지 않더라도, 원리를 아는 사람은 성능 최적화, 설계 결정, 버그 해결 등에서 강한 면모를 보일 수 있다.)


알고리즘 풀이 실력은 어떻게 기를 수 있을까?

이 부분은 내가 직접 정리하면서 자칫 빠뜨리거나 놓치는 부분이 생길 수 있기 때문에, 직접 알고리즘 고수들의 글을 읽어보는 걸 추천한다. 알고리즘 공부의 방향을 잡는 데 도움이 되고, 실력 향상에도 큰 도움이 되는 글들이니 여유가 있을 때 꼭 한 번씩 읽어보길 추천한다. (링크는 지속적으로 업데이트할 예정이다.)

  1. 알고리즘을 정해진 커리큘럼대로 따라가며 실력을 키우고 싶다면 도움되는 글
  2. 재귀 개념이 잘 안 잡힐 때 읽어보면 좋은 글
  3. 해외 글 - 자료구조, 알고리즘, 문제 해결 능력을 어떻게 향상시킬 수 있을까
  4. 해외 글 - 알고리즘적 사고력: 문제 해결 능력 개발 가이드

참고자료

알고리즘 기원

왜 알고리즘을 알고리즘이라고 부르는 걸까요? 영문 위키피디아 - Algorithm


알고리즘을 풀어야 하는 이유

알고리즘 인터뷰: 이론 vs 실무
왜 기업들은 면접에서 자료구조와 알고리즘을 묻는 걸까요?
왜 주요 기술 기업들이 자료구조, 알고리즘, 문제 해결에 집중하는 것일까요? 이는 정당화될 수 있을까요?


알고리즘 실력 기르기

본문 참고


수정 제안하기

다음 게시글
접근성 필수 사항