본 게시물은 이번 카카오브레인, 네이버 부스트캠프, 소프티어 등과 같은 프로그램에서 코딩테스트를 경험하고 난 뒤에 코딩테스트의 중요성과 공부 방법 개선의 필요성을 느끼고 Programmers 의 2가지 글을 참고하여 정리한 내용입니다.
자료구조와 알고리즘란 ?
⚒️ 자료구조 : 메모리를 효율적으로 사용하며, 빠르고 안정적으로 데이터를 처리하는 것이 궁극적인 목표로 상황에 따라 유용하게 사용될 수 있도록 특정 구조를 이루고 있다.
⛓️ 알고리즘 : 특정 문제를 효율적이고 빠르게 해결하는 것이 궁극적인 목표로 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다. 즉 수학적으로 표현할 수 있다.
요리의 과정을 프로그래밍에 대입해 보면 재료는 데이터, 도구는 자료구조, 레시피는 알고리즘이라고 볼 수 있습니다.
결국 개발자는 올바른 데이터와 자료구조 그리고 알고리즘을 골라 효율적인 소프트웨어를 만들 수 있습니다.
자료구조와 알고리즘이 중요한 이유
- 기초 코딩 능력이 좋아진다.(소프트웨어 세상에서 문제는 계속해서 생기고 달라지기 때문에 회사에서는 문제 해결 능력을 갖춘 상태에서 새로운 기술을 빠르게 습득하고 활용할 수 있는 사람을 찾습니다.)
- 한 번 배우면 두고두고 사용할 수 있다.
- 실무에서 활용할 수 있다.
1) 코딩테스트 준비 : 알고리즘 공부할 때
- 알고리즘 공부가 아닌 '문제 해결력'을 기르는 것에 집중하기
- 지망하는 회사에 맞춰 공부 범위를 정하기
- '시각자료'를 활용하여 공부를 즐겁게 하기
공부할 때 참고하면 좋은 사이트 및 서적 📚
- VisuAlgo : 알고리즘을 시각화해서 보여주는 사이트
- Algorithm Visualizer : 알고리즘을 시작화해서 보여주는 사이트
- The Algorithms : 예제 코드를 살펴볼 수 있는 사이트
- 누워서 읽는 알고리즘 : 가볍게 알고리즘에 대해 생각해 볼 수 있는 책
- 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 세트 : 코딩 테스트를 넘어 대회 수준을 준비할 경우 도움을 받을 수 있는 책
2) 코딩테스트 준비 : 문제를 풀 때
- 내가 푼 답이 Best인지 의심해보기(더 효율적인 풀이가 있는지 알아보기)
- 다양한 풀이 방법으로 접근해보기
- 다른 사람의 코드 많이 보기
- 시행착오 기록하기
- 쉽게 포기하지 않기
3) 코딩테스트 노하우
- 문제 지문에 익숙해지기 : 코딩 테스트 문제는 불필요한 정보를 많이 담고 있습니다. 우리가 한때 언어 지문을 읽듯이 필요 없는 부분은 배제하고 중요한 것만 요약해서 읽을 필요가 있습니다.
- 시간복잡도에 익숙해지기 : 내가 푼 로직에 시간 복잡도를 파악해야 제대로 풀었는지 알 수 있습니다.
- 엣지 케이스를 생각하기 : 대부분의 케이스에선 엣지 케이스가 주어지기 때문에 신경 써야 합니다.
- 메모하기 : 긴장하다 보면 찰나의 순간에도 내가 무엇을 하고 있었는지 까먹을 때가 많기 때문에 코드에 주석을 달거나 노트에 메모를 하면서 푸는 것이 좋습니다.
- 디버깅하기 : 어디에서 실수를 했는지 알기 위해 디버깅은 필수입니다.
- 사용하는 언어의 특징 파악하기 : Python을 사용하고 있다면 bigint가 제공되며 comprehension 문법을 통해 코드를 깔끔하게 만들 수 있습니다. 비슷하게 JavaScript에선 구조 분해 할당이나 spread 오퍼레이터를 사용하면 더 깔끔하게 코드를 작성할 수 있습니다.
'Algorithm 💡' 카테고리의 다른 글
[코딩테스트 문제 풀이 전략] 시간 복잡도 / 시간 복잡도 줄이는 Tip (0) | 2023.12.28 |
---|---|
[코딩테스트 문제 풀이 전략] 코딩테스트 관련 Tip (0) | 2023.12.28 |
[Algorithm] 시간복잡도 & 공간복잡도 (0) | 2023.11.26 |
[백준 2493번] 탑 (0) | 2023.08.29 |
[HackerRank] Pairs (0) | 2023.05.13 |