그동안 알고리즘 공부와 코딩테스트에 대해 너무 안일하게 생각했었던 것 같다.
게임 개발자면 그냥 게임만 만들줄 알면 되는거 아닌가? 라고 생각하며 알고리즘 공부와 코딩테스트 풀이를 멀리 했었는데 문득 이런 생각이 들었다. 현재 IT업계는 GPT와 IDE같이 개발을 보조해주는 도구들이 엄청나게 발전해나가는 과도기인데 미래의 내가 본격적으로 활동하는 시기에는 개발 도구에 굉장히 많은 변화와 혁신이 일어난 시기일 것이라고 생각한다.
그러다 보면 기업에서도 AI관련 보안에 민감해서, 사용 금지 시킬수도 있고, 개발자의 실력을 판가름하려면 더욱더 확실한 방법인 코딩테스트의 중요도가 올라갈 것이다.
알고리즘 공부(코테)를 해야하는 이유
변화하는 개발 도구들을 잘 활용하려면, 개발 지식이 넓을 수록 유리하다.
GPT와 같은 생성형 AI들은 어떠한 로직을 구현해달라고 하면 코드를 작성해주지만 그것이 실제 개발에 효율적인 코드는 아닌 경우가 많다. 간단히 구현가능한 코드도 빙빙 돌려서 비효율적으로 작성이 될때가 있는데, 그럴때 단순한 프롬포트를 작성하는 것이 아니라. 개발 지식을 더해서 명령하면 더 좋은 결과를 불러 올 수도 있다. 예를 들어 "플레이어의 인벤토리를 구현해줘" 보단, "아이템의 ID값을 Key, 아이템을 Value로 해서 Key값을 입력하면 해당 아이템에 접근할 수 있는 Dictionary 구조로 만들어줘"라는 식으로도 작성하면 더 효율적이고 빠른 개발을 할 수 있다.
회사에서 프로그래머의 실력을 가늠하는 가장 쉬운 방법이 뭘까? 당연히 코딩테스트라고 생각한다. 개발자의 포트폴리오는 사실 남이 만들거나 도와줬을 수도 있고, 자기가 짠 코드가 아닐 수도 있기 때문에 100% 신뢰할 수 없다. 그반면에 코딩테스트는 개발을 도와주는 IDE 툴이나 GPT 같은 생성형 AI도 없고 심지어 구글로 서칭도 불가능하기에 오로지 개발자의 코딩 실력을 확인할 수 있다는 장점이 있다. 앞으로 기술이 발전하면 발전할 수록 이러한 코딩테스트의 중요성은 나날이 상승할 것이다.
생성형 AI에 절여지는 뇌를 환기시키는 목적도 있다. 개발자라면 GPT나 Google이 없이 코드 한줄도 작성 못하는 것을 부끄럽게 여겨야한다. 예를 들어 플레이어가 몬스터를 공격하는 간단한 처리를 구현하지 못해 GPT에 도움을 받거나, 관련된 자료를 매번 찾아보게 될 수 있다. 물론 초반에 방법을 모른다면, 당연히 구현방법을 찾아보고 GPT를 사용해 지식을 습득해서 문제를 해결하는 것이 당연하다고 생각한다. 하지만, 중요한 것은 GPT와 Google은 결국 도구일 뿐이고 의존하게 되면 안된다는 점이다.
생성형 AI에 익숙해지면 익숙해 질수록 모든 역할을 AI에게 떠넘기게 된다. 초반에는 그냥 단순히 "몬스터와 플레이어가 전투하는 로직 구현해줘"라고 해서 GPT의 도움을 받아 기능을 구현하다가 나중에는 "몬스터와 플레이어가 전투하는 로직에서 데미지 계산이 이상한데 수정해줘"라고 수정도 부탁하게 되고 그렇게 서서히 모든 업무를 GPT에게 의존하게 될 수 있다. 당장 눈앞에 간단한 로직도 GPT에게 도움받는 습관을 들이면, 나중에 어려운 로직은 물론이고 프로젝트의 핵심 기능 또한 GPT에게 도움받아 해결하는 의존형 개발자가 되버린다. 그렇게 되면 개발자로써 높은 곳까지 도달할 수 없다고 생각한다. AI의 의존도를 낮추는데 코딩 테스트가 도움이 될 수 있다고 생각한다, 코딩테스트는 AI는 물론 IDE까지 사용하지 않고 오로지 개발자의 지식에 의존하여 문제를 해결해야한다. 코테를 통해 개발자의 순수 피지컬을 높인다면, AI의 활용성도 높이고 의존도도 낮출 수 있다고 생각한다.
말이 길었지만 알고리즘 공부가 중요한 이유를 요약하자면 아래와 같다
1. 앞으로 발전하는 개발툴을 더 효율적으로 사용하기 위해
2. 기술이 발전할 수록 IT 기업들은 코딩테스트를 통해 개발자를 채용할 수 밖에 없음.
3. GPT 없으면 코드 한줄 적지 못하는 개발자가 되지않기 위해
코딩테스트 준비 방법
코딩 테스트 준비 방법 또한 굉장히 중요하다.
방법을 잘 알고 코딩 테스트 문제를 푼다면, 다른 사람보다 더 효율적이고 빠르게 실력을 늘릴 수 있다. 사실 나는 어떻게 풀어야할지 방법조차 모르는 문제를 혼자서 오랜 시간 고민하는걸 별로 좋아하지 않는다. 개발자라면, 어려운 문제에 끈질기게 집착해서 해결해나가는 능력도 중요하지만, 세상에는 다양한 천재 개발자들이 수많은 고민으로 쌓아올린 데이터들이 널려있는데, 그 지식을 모른채하고 스스로 고민하는건 혼자서 원시시대로 돌아가는 거랑 다를바없다.
코딩테스트 문제 풀이의 핵심은 이 두가지의 적절한 조화라고 생각한다. 전혀 모르는 문제라면, 모름을 인정하고 배워서 나만의 방법으로 문제를 풀고, 방법은 아는데 구현이 오래걸린다면 여유를 가지고 문제에 끈질기게 도전하는 것이 중요하다. 단, 방법을 알아도 2시간 내로 풀지 못하면 그건 그냥 모르는 거라고 인정하자.
코딩테스트 공부 방법
1.코딩 테스트 사이트를 선정한다 (백준, 프로그래머스,LeetCode 등)
- 백준은 테스트 문제가 많고, 프로그래머스는 기업 맞춤형 문제가 많고, LeetCode는 영어로된 알고리즘 공부에 좋음
2.문제를 보자마자 무작정 풀기보다, 문제 분석을 하며 풀이 전략 세우기
- 문제마다 요구하는 자료구조나 알고리즘이 분명 존재한다. 그 핵심을 이해하고, 전략을 세운뒤에 코딩을 시작하자.
3.상수 조건을 보고 시간 복잡도를 가늠하기
- 문제마다 주어지는 상수 조건을 확인하면 이문제를 풀때 요구되는 알고리즘의 시간복잡도와 공간복잡도를 가늠할 수 있다.
4.코드를 한줄 씩 적을 때마다, 그 이유를 같이 설명하거나 주석으로 적는 습관을 들이자.
- 실제 온라인 코딩테스트나, 코테를 보게되면 내가 짠 코드를 설명할 줄 알아야한다. 코드를 한줄씩 적어가면서 그 이유를 설명하는 습관을 들이면 분명 실전에서도 효과를 볼 수 있을 것이다.
5. 무작정 제출하지말고, 제출 전에 샘플케이스를 통해 코드를 점검하자
- 제출을 통해 오답인 것을 확인하고 수정하는게 습관이 되면, 실제 코테에서 신뢰도도 떨어져 보이고 불이익이 있을 수 있다. 제출 하기전에 샘플케이스를 통해 시뮬레이션을 돌리는 습관을 반드시 들이자.
6. 시간 복잡도와 공간 복잡도까지 점검이 완료된 후에 제출하기.
- 제출전에 내가 짠 코드를 다시한번 점검하면서, 비효율적인 부분이 존재하는지 확인해보자.
7.다른 사람의 코드를 보고 점검하기
- 코드를 제출했다면, 다른 사람들의 풀이방법을 보면서 더 좋은 방법이 있었는지 확인해보는 시간을 가지자.
8. 30분 ~ 1시간 고민했는데 풀이 방법이 떠오르지 않으면, 그냥 그문제는 모르는거다.
- 그러니 자존심 상하더라도 풀이방법을 모색해보는 시간을 가지고, 다시 도전해보자.
9. 방법을 알더라도 2시간내로 문제를 풀지 못한다면, 그것 또한 풀줄 모르는거다.
- 이 경우에도 자존심 상하더라도 다른사람의 코드를 참고해서 코드를 완성하자.
10. 풀었던 문제라도 40분 이상 걸린다면, 다음날 혹은 일정 시간이 지난뒤에 다시 풀자.
- 내가 완벽히 이 문제를 안다는 기준은, 문제를 보자마자 20분내로 코드를 작성할 줄 알아야 완벽히 아는 것이다.
'알고리즘' 카테고리의 다른 글
LeetCode in C# 2. Add Two Numbers (0) | 2025.03.23 |
---|---|
LeetCode in C# 1. Two Sum (0) | 2025.03.22 |
프로그래머스 [C#] 멀리뛰기 (0) | 2024.11.04 |
프로그래머스 [C#] 귤 고르기 (0) | 2024.11.01 |
프로그래머스 [C#] 다음 큰 숫자 (0) | 2024.10.25 |