Algorithm

자료구조 및 알고리즘의 중요성과 코딩테스트 준비

킹우현 2023. 7. 16. 15:52

본 게시물은 이번 카카오브레인, 네이버 부스트캠프, 소프티어 등과 같은 프로그램에서 코딩테스트를 경험하고 난 뒤에 코딩테스트의 중요성과 공부 방법 개선의 필요성을 느끼고 Programmers 의 2가지 글을 참고하여 정리한 내용입니다.

 

자료구조와 알고리즘란 ?

⚒️ 자료구조 : 메모리를 효율적으로 사용하며, 빠르고 안정적으로 데이터를 처리하는 것이 궁극적인 목표로 상황에 따라 유용하게 사용될 수 있도록 특정 구조를 이루고 있다. 

⛓️ 알고리즘 : 특정 문제를 효율적이고 빠르게 해결하는 것이 궁극적인 목표로 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다. 즉 수학적으로 표현할 수 있다.

 

요리의 과정을 프로그래밍에 대입해 보면 재료는 데이터, 도구는 자료구조, 레시피는 알고리즘이라고 볼 수 있습니다.

결국 개발자는 올바른 데이터와 자료구조 그리고 알고리즘을 골라 효율적인 소프트웨어를 만들 수 있습니다. 

 

자료구조와 알고리즘이 중요한 이유 

  1. 기초 코딩 능력이 좋아진다.(소프트웨어 세상에서 문제는 계속해서 생기고 달라지기 때문에 회사에서는 문제 해결 능력을 갖춘 상태에서 새로운 기술을 빠르게 습득하고 활용할 수 있는 사람을 찾습니다.)
  2. 한 번 배우면 두고두고 사용할 수 있다.
  3. 실무에서 활용할 수 있다.

 

1) 코딩테스트 준비 : 알고리즘 공부할 때

  • 알고리즘 공부가 아닌 '문제 해결력'을 기르는 것에 집중하기
  • 지망하는 회사에 맞춰 공부 범위를 정하기
  • '시각자료'를 활용하여 공부를 즐겁게 하기
공부할 때 참고하면 좋은 사이트 및 서적 📚
- VisuAlgo : 알고리즘을 시각화해서 보여주는 사이트 
- Algorithm Visualizer : 알고리즘을 시작화해서 보여주는 사이트 
- The Algorithms : 예제 코드를 살펴볼 수 있는 사이트
- 누워서 읽는 알고리즘 : 가볍게 알고리즘에 대해 생각해 볼 수 있는 책 
- 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 세트 : 코딩 테스트를 넘어 대회 수준을 준비할 경우 도움을 받을 수 있는 책

 

2) 코딩테스트 준비 : 문제를 풀 때

  • 내가 푼 답이 Best인지 의심해보기(더 효율적인 풀이가 있는지 알아보기)
  • 다양한 풀이 방법으로 접근해보기
  • 다른 사람의 코드 많이 보기
  • 시행착오 기록하기
  • 쉽게 포기하지 않기

 

3) 코딩테스트 노하우

  • 문제 지문에 익숙해지기 : 코딩 테스트 문제는 불필요한 정보를 많이 담고 있습니다. 우리가 한때 언어 지문을 읽듯이 필요 없는 부분은 배제하고 중요한 것만 요약해서 읽을 필요가 있습니다.
  • 시간복잡도에 익숙해지기 : 내가 푼 로직에 시간 복잡도를 파악해야 제대로 풀었는지 알 수 있습니다.
  • 엣지 케이스를 생각하기 : 대부분의 케이스에선 엣지 케이스가 주어지기 때문에 신경 써야 합니다. 
  • 메모하기 : 긴장하다 보면 찰나의 순간에도 내가 무엇을 하고 있었는지 까먹을 때가 많기 때문에 코드에 주석을 달거나 노트에 메모를 하면서 푸는 것이 좋습니다. 
  • 디버깅하기 : 어디에서 실수를 했는지 알기 위해 디버깅은 필수입니다.
  • 사용하는 언어의 특징 파악하기 : Python을 사용하고 있다면 bigint가 제공되며 comprehension 문법을 통해 코드를 깔끔하게 만들 수 있습니다. 비슷하게 JavaScript에선 구조 분해 할당이나 spread 오퍼레이터를 사용하면 더 깔끔하게 코드를 작성할 수 있습니다.