/algo_solution

알고리즘 문제 공부 및 연습 정리

Primary LanguageJavaScript

알고리즘 문제 연습

문제상황에 대한 문제해결능력 연습

  • 프로그래머스 문제를 연습하는 것으로 시작
  • level 3까지 자기 힘으로 풀 수 있는 것이 목표
  • 고민하다 못 푼 것에 대해 다른 사람의 답안을 찾아서 알았을 때는 꼭 다시 스스로 풀어볼 것
  • 답을 보고 나서 주석을 달아도 나중에 스스로 다시 풀 수 없다면 내 것이 아니다.
  • 주에 최하 3문항은 푸는 것을 목표로 하고 있다

왜 알고리즘과 자료구조를 공부하지?

  • 문제를 푸는 것은 의미가 없다. 중요한 것은 문제를 가정한 상황이 실제 서비스에서는 어떤 형태로 나타나는가에 대한 문제
  • 가령 특정한 조건으로 고객의 결제대금을 정산해야 하는 오픈몰 쇼핑몰을 개발해 본 경험에서는 해당 작업을 높은 복잡도 비용을 갖고 새벽에 taskjob을 통해 사용자가 적을 때 많은 I/O 작업과 계산작업을 통해 DB에 고정값을 만들고 일자 단위로 내려줄 지, 아니면 정말 '실시간에 가깝게' 판매 내역과 결제대금에 대한 정산 요소를 보여줄 지를 선택해 볼 수 있을것이다.
  • 이때 그러한 수의 합을 특정 자료와 알고리즘을 통해 단순히 반복문을 통해 전체 순회를 하는 것보다 '더 나은 방식'으로 해결할 수 있다면 궁극적으로 데이터의 응답속도와 서버의 부하를 줄일 수 있다.
  • 물론 이 때에도, 시간복잡도를 위해 공간복잡도를 희생하거나, 반대의 경우도 있을 수 있다. 다행히 지금은 '메모리 공간'은 '응답 속도'에 비해 비교적 적은 중요도를 지닌다. 하드웨어 파워 만세!
  • 결국 내가 프로덕트 레벨의 코드를 만든다는건, 특정 상황에 대한 해결능력을 갖추고 있어야 하며, 더 나은 해결책을 생각할 수 있어야 하고, 더 나은 해결책의 장단점을 고민할 능력이 있어야 한다는 것이다
  • 몇 레벨의 문제를 푸느냐도 중요하지만, 문제상황을 자세하게 탐색하고 여러 방향으로 고민하지 않으면 실무에 적용할 수 있는 능력이 떨어질 것 같다.
  • 그런면에서 새로 산 책은 너무너무 맘에 든다. 문제상황의 제한조건을 정확히 정리하고, 복잡도를 고려한 다양한 아이디어를 고민하고, 테스트와 코드를 통해 구현하는 과정을 습관화 하는 것이 실무에서도 응용하기 좋을 것 같기 때문이다.

중요한 것은, 알고리즘을 잘 푸는 사람이 되는 것이 아니다. 프로덕트 요구사항에 대해 일정, 퀄리티, 동료 등 여러가지를 고려해 개발해야 한다는 것이고, 알고리즘은 이 중에서 퀄리티에 대한 능력을 길러준다는 방향으로 접근해야 한다. 익숙해지면, 좋은 퀄리티를 일정 내에 만들어 내는 것도 가능해질 것이다.