목차
- 이 글을 추천하는 사람
- 무작정 풀지 말자 : 알고리즘 유형 부수기
- 무작정 문제를 풀자 : 알고리즘 별로 ‘문제’ 부수기
- 무작정 풀고 효율적으로 돌아보기 : 내가 짠 코드가 최선일까?
- 위의 루틴으로 2주만에 코딩테스트 참여한 후기
0. 이 글을 추천하는 사람
- 백준을 어떻게 풀어야하는지에 대한 습관화 솔루션
코딩테스트 준비해야하는데 자꾸 미루게 되고, 백준은 다들 풀라고 하는데 시작이 어렵다면, 이 글을 읽을 것을 추천한다. 딱 한 달 전까지만 해도 나는 위의 상태와 같았고, 지금은 어떻게 코딩테스트를 준비해야는지 알았기 때문이다.
물론 정답이라 하긴 어렵지만, 적어도 어떻게 준비해야하는지에 대해 고민할 시간을 줄여줄 것이다. 이 루틴대로 하면 변화가 생길 것이다. 단순히 ‘백준 풀어라’가 아닌 ‘어떻게’ 풀어야하는지에 대한 솔루션을 제공해주기 때문이다.
이것대로만 하면 1일 5문제 솔빙 하는 습관을 들일 수 있다. 또한 코딩테스트를 앞두고 있다면 이 루틴의 효과는 더 발휘될 것이다. 이 루틴은 파이썬 혹은 다른 언어를 사용할 줄 아는, 다시 말해 파이썬의 문법을 아는 사람에게 적용된다. 또한 아래와 같은 사람들에게 이 글을 추천한다. 물론 이외의 사람들도 환영이다.
- 코테를 처음 준비하는 사람
- 백준을 알고, 알고리즘도 대강 배웠지만 문제풀이를 어떻게 시작해야할지 모르겠는 사람
- 코테가 벼락치기가 가능한지 궁금한 사람
- 문제 풀이를 미루고 있는 사람 (이 글을 읽고 있다는 것만으로도 문제 풀이 습관화가 시작되었다고 말해주고 싶다.)
1. 무작정 풀지 말자 : 알고리즘 유형 부수기
- 코딩테스트에서 사용되는 알고리즘을 가장 빠르게 공부하는 법
문제 풀이를 하기 전에, 우리는 알고리즘을 공부해야한다. 코딩 테스트에 어떤 방식으로 문제를 풀어야할지에 대한 어느정도의 공식이 존재한다. 문제 별로 풀이방법이 정해져있고, 그 풀이 방법의 메인 아이디어가 알고리즘이다. 그렇기 때문에 출제자의 의도를 파악해 문제를 해결하기 위해서는 문제의도인 알고리즘을 알아야한다.
학교에서도 알고리즘에 대한 수업을 들었지만, 나는 ‘코딩테스트에서 쓰이는 알고리즘’을 알고 싶었기에 아래 강의를 수강했다.
1강이 파이썬 문법이라고 넘겨서는 안된다. 코딩테스트에 많이 쓰이는 문법을 핵심만 알려주기 때문에 모든 내용을 듣는 것을 추천한다. 노션에 정리해두면 처음에 풀 때 참고하기 좋다. 그리고 코딩테스트 하루 전에 복기하기도 편하다.
하루에 한 강의를 듣고, 영상 안에 있는 문제를 먼저 풀어본다. 아래와 같이 하루에 한 알고리즘을 부순다고 생각하면 된다.
2. 무작정 문제를 풀자 : 알고리즘 별로 ‘문제’ 부수기
- 하루에 5문제씩 10일을 투자하면 50문제를 푼다.
일단 강의를 들었다면 그 유형의 문제 3개정도는 평균적으로 풀게된다. (강의 안에서 풀게 함) 그러면 다른 문제도 궁금할 것이다. 이 유형이 어떤식으로 문제에 적용되는지 궁금하기 때문이다.
이젠 그 날 공부한 유형의 백준문제를 풀어본다. 알고리즘을 유추하는 것도 중요하지만, 연습할 때엔 알고리즘 별로 감을 잡는 게 더 중요하다고 생각한다.
나는 코테를 2주만에 준비했기 때문에 많은 문제를 풀어보진 못했다. 앞으로 해당 유형 별로 50문제를 푸는 게 목표이다. 유형 별로 10문제만 풀어봤는데, 정말 50개 정도 풀면 실력이 늘 것 같다. (지금도 조금은 는 게 느껴지기 때문이다.)
- 진짜 습관화하는 시작, 푼 문제들을 시각화하기
만약 어떤 문제를 풀어야할지 모르겠다면 나는 이 블로그에 있는 엑셀 시트를 활용하는 것을 추천한다. 문제가 한 눈에 정리되어 있고, 아무 생각없이 쭉쭉 풀기에 굉장히 좋다. 또한 이 분처럼 형광펜으로 시각화를 하면 진행상황이 잘 눈에 담긴다. 이 분의 글도 굉장히 도움이 되니 읽는 것을 추천한다.
https://claudiajkang.medium.com/알고리즘-초보에서-벗어나기-위한-여정-1ffb6bdfec6b
알고리즘 초보에서 벗어나기 위한 여정
알고리즘 초보의 알고리즘 공부과정
claudiajkang.medium.com
다음 글에서는 내가 엑셀시트를 만들어서 제공할 예정이다.
3. 무작정 풀고 효율적으로 돌아보기 : 내가 짠 코드가 최선일까?
- 문제풀이를 레벨업 하는 법 : 다른 사람 코드 참고하기
‘무작정’에 담긴 말은 일단 풀라는 것이었다. 알고리즘 별로 접근하기 때문에 일단 풀기 시작했다면, 다 짠 코드를 돌아봐야한다. 코드와 실력을 발전시키기 위해서는 이 과정이 중요하다.
- 솔빙한 경우
우선 솔빙한 문제에 대해서 한 문제 당 45분을 투자한다고 하면, 15분은 아이데이션을 하고 30분동안 코드를 짠다. 그 뒤에 리뷰하는 과정이 30분 정도 걸린다. 바로 ‘11047 파이썬 그리디’이런식으로 서치를 해서, 다른 사람이 이 알고리즘으로 어떻게 풀었는지 검토하는 것이다.
그렇게 하면 1. 시간 효율적으로 데이터를 관리하는 법 2. 깔끔한 문법 3. 효율적으로 반복문을 도는 법 등에 대한 아이디어를 얻게 된다. 나는 리뷰 과정에서 위의 세가지 같은 깨달음이 있었다면 문제 위에 따로 정리를 해두었다.
- 솔빙하지 못한 경우
솔빙하지 못했다면, 나는 그 문제를 한시간 넘도록 잡고 있는 것보다 다른 사람의 아이디어를 얻는 것을 추천한다. 이때 그 코드를 다 참고하는 것이 아닌 문제 접근법, 아이디어만 보도록 한다. 솔빙하지 못하는 경우 45분동안 고민 + 15분 검색 및 아이디어 얻기 + 20분 문제 구현 정도로 문제 풀이 시간이 더 길어질 것이다. 하지만 얻는 것도 많다고 생각한다.
4. 위의 루틴으로 2주만에 코딩테스트 참여한 후기
- 코딩테스트로 나 자신 돌아보기
매일 5개 이상씩 문제를 풀다보니, 솔직히 코딩테스트를 할 때도 시험보다는 문제풀이하는 느낌이 강했다. 습관화가 되었기 때문이다. 하지만 문제 풀이 때도 감이 안 왔던 dp를 못풀었다. 그리디 문제도 구현으로 접근해서 시간 초과되었다.
그래도 코딩테스트를 계기로 위의 루틴에 탄력을 더 받은 것 같다. 알고리즘 별로 더 훈련을 해서, 1) 문제를 봤을 때 어떤 알고리즘으로 풀어야하는지 보는 힘과, 2) 자료구조를 센스있게 관리하는 법 등을 더 익히고 싶다. 확실히 코딩테스트를 치르고 나면 무엇이 부족한지, 내가 지금 어떤 상태인지를 확인할 수 있다. 만약 계속해서 코딩테스트 공부를 미루고 있다면 그냥 한번 질러보고, 그것을 대비하기 위해 공부하는 것도 추천한다.
- 공부 루틴은 계속해서 발전할 예정
나는 아직도 부족하다. 주니어 개발자도 아닌 베이비 개발자.. 같은 것이다. 앞으로 수많은 코딩테스트를 치를 것이고, 그러기 위해서는 위 루틴을 더 빡세게 실천해서 실력을 길러야한다. 계속해서 위 루틴을 실천한 후기를 적고 싶다. 끝내 ‘취업하는 코딩테스트 준비법’에 대한 콘텐츠도 써보고 싶다. 현업자의 시점에서 말이다.
위 루틴에 대한 피드백도 언제나 환영이다. 부족한 점이 있는 사람은 귀를 열어야한다. 나는 코딩테스트가 끝났지만 위 루틴을 계속해서 실천할 예정이다 🙂 더 발전된 루틴을 정착화 시킬 것이다.
'Record > 경험' 카테고리의 다른 글
[코테] 삼성 2023 상반기 SW역량테스트 후기 (0) | 2023.04.12 |
---|---|
<CJ UNIT 3기> 1차 합격 후기 (0) | 2020.08.25 |