본문 바로가기
Codeit/알고리즘의 정석

좋은 알고리즘이란? / 알고리즘이란?

by 에파 2021. 3. 27.
728x90

 

좋은 알고리즘이란? / 알고리즘이란?

 

 

알고리즘이란?

 

 

알고리즘은 어떤 문제를 해결하기 위한 자세한 방법이다. 목적은 같으나 방법이 조금씩 다를 수 있다. 같은 문제를 해결하기 위해서도 다양한 알고리즘이 존재한다.

 

 

좋은 알고리즘이란?

 

1. 문제를 해결하는 것.

2. 문제를 더 잘 해결하는 것.

 

 

컴퓨터 알고리즘이란?

 

컴퓨터가 어떤 문제를 해결하기 위해서 컴퓨터가 이해할 수 있는 방식으로 정리되어 있는 해결 방법이다.

예를 들어 뒤죽박죽 섞여 있는 배열 숫자 원소들을 순서대로 배치하는 문제가 있다면, 우리는 정확하고 효율적으로 숫자들을 정렬하는 알고리즘을 찾아내야 한다.

 


네비게이션 어플

 

두 회사에서 각각 네비게이션 어플을 출시했다고 가정해보자. 둘 다 디자인이 훌륭하고, 사용성도 나쁘지 않다. 그러면 어떤 어플을 사용해야 할까?

 

우선 길을 정확하게 알려주고 도착 시간도 정확하게 알려줘야 한다. 틀린 정보를 알려주는 어플은 그냥 안 쓰게 될 것이다. 그리고 두 번째로는 길을 빨리 알려줘야 한다. 만약 길 한 번 찾아주는 게 2분씩이나 걸리면 답답해서 못 쓸 것이다.

 

결론적으로 누가 더 정확하고 효율적인 알고리즘을 사용하는지가 중요하다. 서비스의 성공 여부가 알고리즘에 달려 있는 것이다.

 

 

영화 어플

 

예전에는 영화를 보고 싶으면 비디오나 DVD를 빌려 봤었는데, 요즘은 넷플릭스나 왓챠플레이 같은 서비스를 구독해서 볼 수 있다.

 

영화를 직접 검색해서 볼 수도 있지만 보통은 넷플릭스가 추천해 주는 영화를 보는데, 그냥 평점 순으로 추천해 주는 게 아니라, 데이터를 기반으로 개개인에 맞춰 영화를 골라주는 것이다. 이것도 알고리즘의 역할이다.

 

넷플릭스에서는 추천 알고리즘을 개선하고 싶어서 대회를 열기도 했었는데, 1등한 팀은 무료 10억원이 넘는 상금을 받아갔다고 한다. 그만큼 넷플릭스라는 서비스에게 알고리즘이 중요한 역할을 차지하고 있는 것이다.

 

 

알고리즘의 중요성

 

네비게이션이나 영화 어플 말고도, 알고리즘은 거의 모든 분야에서 핵심적인 역할을 맡고 있다.

 

예전에는 서비스를 만드는 것 자체만으로도 의미가 있었는데, 이제는 소프트웨어 개발에 대한 진입 장벽이 많이 낮아졌기 때문에 무언가 차별성이 필요하다. 기술적으로 얼마나 잘 구현되었는지, 즉 알고리즘이 얼마나 좋은지에 따라 서비스의 성패가 갈리는 경우도 많다.


알고리즘은 개발자의 기본 소양이다?

 

성공하신 개발자분들에게 조언을 구하면, 알고리즘을 꼭 배우라고 항상 말씀하신다. 개발자가 알고리즘을 모르면 도대체 뭐가 어떻길래, 그런 말을 하는 것일까?

 

유능한 개발자들의 대부분은 알고리즘적 사고력을 갖추고 있고, 대표적인 알고리즘 정도는 다 꿰고 있다.

 

개발자가 되면 이런 식의 대화가 오간다.

 

  • 여기서는 BFS 알고리즘을 써줘.
  • 여기는 O(n)으로 작성해야 할 것 같은데?
  • Divide and Conquer 방식으로 접근해보자.

알고리즘에 대한 지식 없이는 원활한 소통이 어려울 것이다.

 

 

알고리즘은 개발자의 실력

 

소통의 문제를 떠나서, 알고리즘은 결과물에서도 차이를 만들어 낸다.

 

어떤 개발자가 웹 개발을 처음 했을 때, 알고리즘의 중요성을 뼈저리게 느낀 적이 있다고 한다. 분명 사용자 수는 천천히 늘어나는데, 사이트가 심각할 정도로 느려진 것이다. 아무리 봐도 뭐가 문제인지 모르겠는데, 알고리즘을 공부한 친구가 보더니 금방 해결됐다. 효율성에 대해서 조금만 신경 써도 쉽게 해결할 수 있는 부분이었다.

 

그 개발자는 어렵고 복잡한 문제를 푸는 사람에게나 알고리즘 공부가 필요한 줄 알았는데, 모든 프로그램에 알고리즘이 포함되어 있다는 걸 몸소 알게 되었고, 그래서 알고리즘 공부를 하면 평소 개발할 때에도 확실히 더 좋은 코드를 작성할 수 있다는 확신이 생겼다.

 

여러분도 개발자로서 계속 레벨업을 하고 싶다면 알고리즘 공부는 필수적일 것이다.

 

 

회사 가려면 알고리즘 잘해야 한다.

 

Google, Facebook, Amazon 등 대기업들을 포함한 대부분의 회사에서는 개발자를 뽑을 때 알고리즘 테스트를 진행한다. 그 중에서 대기업들은 특히 알고리즘을 거의 가장 중요한 평가 기준으로 본다.

 

실무적인 경험이 부족하더라도 알고리즘적 사고력이 검증된 지원자라면, 나머지는 충분히 가르칠 수 있다고 판단을 하는 것이다. 반대로 알고리즘을 잘 모르는 개발자라면 좋은 대우를 받기 어렵다는 뜻이다.

 

취업이라는 현실적인 상황을 고려해도 알고리즘 공부는 의미 있는 투자라는 생각이 든다.

 

댓글