알고리즘 공부를 시작하기 전 알아야할 것들

알고리즘 공부를 알고리즘 문제 해결 전략 (종만북) 이라는 책으로 시작했습니다. 몇 장 안되는 앞부분을 읽어보았는데 도움이 되는 내용들이 많아 공유하고자 포스팅을 작성합니다. 알고리즘 대회 준비하시는 분이나 알고리즘으로 취업 준비하시는 분들은 책을 한번씩 읽어보시는 것을 추천합니다. 그럼 시작합니다. 🙂

알고리즘 공부?????????????????????????????????????????

문제 해결 방법

알고리즘은 어떤 문제 해결 방법을 공식화 한 것입니다. 여기서 우리는 문제 해결에 초점을 맞춰 일반적으로 문제를 해결하는 방법에 대해 살펴보고자 합니다. How to Solve it 이란 서적에 문제 해결 방법 과정은 다음과 같습니다.

  1. 문제를 이해한다.
  2. 문제를 해결할 계획을 세운다.
  3. 문제를 해결한다.
  4. 문제를 해결 방법에 대해 회고한다.

예시로 수학 문제 풀이를 들 수 있습니다. 수학 문제를 풀때 우리가 인식하지 못하지만 이러한 일련의 과정을 거칩니다. 수학 문제를 읽고 이해하고 아는 범위내에서 문제 해결 방법을 찾고 문제를 풉니다. 대개 사람들은 회고는 잘 안하지만 답이 틀린 경우 오답 노트를 작성하는 것처럼 더 나은 해결 방법이나 실수를 정리합니다.

알고리즘 문제 해결 방법

컴퓨터 공학에서도 내용은 같습니다. 알고리즘 문제 해결 전략 (종만북)에서 위의 문제 해결 방법에 비추어 알고리즘 문제를 푸는 방법에 대해 여섯 단계로 세분화 하였습니다.

  1. 문제를 읽고 이해한다.
  2. 문제를 익숙한 용어로 재정의한다.
  3. 어떻게 해결할지 계획을 세운다.
  4. 계획을 검증한다.
  5. 프로그램으로 구현한다.
  6. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.

우리가 알고리즘 문제를 풀 때 항상 위와 같은 플로우로 풀지는 않습니다. 하지만 이런 플로우를 의식하면서 문제를 해결하면 자신이 어느 부분이 부족한지 좀 더 일찍 깨닫고 그 부분에 노력을 더 투자할 수 있는 효율적인 사고가 가능해집니다. 제가 인상깊게 본 부분과 개인적인 생각들을 공유하고자 합니다.


하나의 문제에 너무 많은 시간을 허비하지 말자!

알고리즘을 풀다보면 어떻게 풀어야하는지 감이 안잡히는 경우에 많습니다. 하루 종일 한 문제에 대한 생각만 합니다. 혼자서 끙끙거리다가 도저히 참을 수 없어서 답을 찾아봅니다. 이 문제 풀려고 코드 200줄은 써도 풀지 못하는데 누군지 모르겠지만 10줄이면 해결할 수 있는 코드를 공개해 놓았습니다. 자괴감이 들기 시작합니다. 이 길이 맞는가 싶기도 합니다. 알고리즘 공부가 하기 싫어집니다.

끙끙 혼자 생각해봐야 답이 나오지 않습니다. 알고리즘 문제에 대한 풀이는 길어봐야 1~2시간동안 진행해보고 내가 부족한 점이 어떤 것인지 위의 6개의 해결 과정 중에 찾는 것을 추천합니다. 문제를 이해를 못하였는지, 문제 패턴에 익숙하지 않아서 해결 계획을 세우지 못했는지, 프로그램 구현 과정에서 어려움이 있어 못 풀었는지 등 자신의 상황을 객관적으로 바라보고 부족한 부분을 집중적으로 연습합니다.

회고의 과정을 중요시 여기자!

알고리즘 문제 풀이를 단기간에 잘하는 방법은 없습니다. 장기적으로 바라보고 자신이 문제를 해결한 과정을 돌이켜 보고 개선할 방법을 찾는 회고 과정을 거치는 것이 중요합니다. 자신이 문제를 풀면서 생각했던 부분을 코드와 같이 정리해 블로그, 노트에 기록을 해두거나 풀지 못한 과정을 정리하는 것을 추천합니다. 또한, 다른 사람의 코드를 보면서 자신의 풀이 과정과 비교하면 좋습니다. 남이 작성한 코드를 읽는 것은 쉽지 않지만 남의 생각을 따라가면서 생각하지 못한 통찰을 얻을 수 있습니다.

코드를 깔끔하고 단순하게 작성하는 연습을 하자!

알고리즘 문제 풀이에 대한 코드 작성도 어느 정도는 엄격하게 진행하는게 유리합니다. 간결한 코드를 유지하여 의미있는 Naming을 통해 본인 가독성을 높여서 코드를 작성하면 문제 풀이 도중에 혼란이 오는 경우를 방지할 수 있습니다. 인간의 기억력은 한계가 있으니까요. 코드와 데이터를 분리하는 연습도 필요합니다. 단순함으로 해결할 수 있는 문제들이 많습니다.

코드를 깔끔하고 단순하게 작성하자!!

알고리즘 분석법을 알고 의식하면서 문제 풀이를 하자!

알고리즘 접하면서 처음 익히게 될 것이 알고리즘 분석법에서 시간 복잡도(실행 시간)와 공간 복잡도(메모리)에 관한 내용일 것입니다. 공간 복잡도에 대한 이슈는 많이 없을 것으로 보고 시간 복잡도에 초점을 맞추어 알고리즘을 분석하는 것을 추천합니다. 주로 시간 복잡도에 영향을 미치는 것은 반복문이 될 것입니다. 반복 구성에 따라 반복 횟수에 따라 시간 복잡도에 지대한 영향을 미치는 것을 인지하고 아래 그림처럼 최대한 상수, 선형 알고리즘에 가깝게 구성할려고 의식하면서 문제를 풀면 많은 도움이 될 것 같습니다.

알고리즘은 분석은 이 그림 하나면 충분하다!

TL;DR

  • 문제 해결 방법에 대한 과정(문제 이해 -> 계획 -> 실행 -> 회고)을 익히자!
  • 알고리즘을 공부 시작 전에 알아두어야 할 것들
    • 하나의 문제에 너무 많은 시간을 허비하지 말자!
    • 회고의 과정을 중요시 여기자!
    • 코드를 깔끔하고 단순하게 작성하는 연습을 하자!
    • 알고리즘 분석법을 알고 의식하면서 문제 풀이를 하자!

답글 남기기

이메일 주소는 공개되지 않습니다.