부캠 글쓰기 모임 6회

코테 준비 이제는 더 이상 물러날 곳이 없다!

부스트캠프의 5개월도 이제 끝나가네요. 여기서 얻은 가장 소중한 것을 꼽으라면 동료 캠퍼들입니다. 좋은 인연을 만나서 행복했습니다.

우선 글쓰기 모임을 시작하면서 처음 계획했던대로 여섯 번의 글쓰기를 다 마쳐서 좋습니다. 이번 글쓰기 주제를 무엇으로 할지 며칠 동안 고민을 하다가 문득 알고리즘 관련해서 글을 쓰자는 생각이 들었습니다. 다만 지난 번처럼 특정 알고리즘에 관해 소개하는 글은 아닙니다. 이제 다시 취준을 시작해야 하는데 코테 준비가 필요하지 않겠습니까? 그래서 그냥 제가 알고리즘 공부를 했던 과정을 회고하고 앞으로 코테 준비에 관해서 생각한 것을 가볍게 써보려고 합니다.

5개월 간의 AI 교육과정이 곧 끝나기에 다시 알고리즘 공부를 해야 합니다. 정확하게 말하자면 코딩테스트 준비지요. 저는 우연히 백준 사이트를 알게 되면서 알고리즘 공부를 시작했습니다. 처음 백준 계정을 만들고, 동시에 solved.ac 사이트에 연동한 날짜가 21년 3월 23일입니다. 제 생일 하루 전날이라 기억이 나는데, 아주대 스타벅스에서 공부를 시작했습니다. 첫 느낌은 좋았습니다. 오랜만에 다루는 파이썬으로 간단한 구현 문제부터 풀면서 고민하는 시간이 좋았거든요. 처음엔 입력을 어떻게 받는지조차 잘 몰라서 검색했던 기억이 납니다. 입력 조건이 주어졌는데 그걸 코드 속에 구현해야 하나 싶었거든요. 아무튼 조금 어려운 문제를 만나면 몇 시간이고 고민하는 경험이 수학 문제를 푸는 것처럼 느껴져서 즐거웠습니다. 매일 문제를 푼 건 아니지만 그 무렵엔 하루에 보통 6문제 정도 풀었습니다. 지금 보면 쉬운 문제지만 그때는 간단한 구현조차도 어려워서 시간이 오래 걸렸습니다.

알고리즘 공부를 시작하고 한 달 정도 지났을 무렵 주변에서 알고리즘 스터디를 같이 하자고 연락이 왔습니다. 흔쾌히 수락한 다음에 나동빈이 쓴 이것이 취업을 위한 코딩 테스트다 를 사서 본격적으로 알고리즘 공부를 시작했습니다. 일주일마다 풀어와야 하는 문제를 정하고 주말에 구글 미트로 만나서 랜덤으로 문제를 배정 후, 자신의 풀이를 소개하고 피드백하는 방식이었습니다. 코로나 때문에 오프라인 모임은 하지 못했습니다. 그래도 다양한 알고리즘을 익히면서 관련 문제들을 빠르게 풀어나가니 실력이 금방 늘었습니다. 이렇게 한창 알고리즘 공부를 열심히 했던 시기가 21년 6월부터 8월입니다. 자연스럽게 티어도 빠르게 올라갔고, 이후에 KMP, 이분 매칭, 강한연결요소 등 잘 안 쓰이거나 조금 어려운 알고리즘도 공부하게 되었습니다. 다만 지금 생각하면 사실 코테 준비에 상관없는 알고리즘에 너무 시간을 쏟은 것 같다는 생각도 듭니다.

성장 그래프

티어 골드5 골드4 골드3 골드2 골드1 플래5 플래4 플래3 플래2
달성 날짜 21년 6월 5일 6월 14일 6월 22일 7월 2일 7월 9일 7월 23일 8월 8일 11월 2일 22년 2월 8일

가장 랭킹이 높았던 때는 22년 2월 7일에 906등이었던 순간이네요.

어쨌든 문제는 꾸준히 풀었기에 점수는 오릅니다. 그런데 말입니다. 문제는 제가 작년 가을 무렵부터 지금까지 사실상 알고리즘 공부를 거의 하지 않았다는 것입니다. 스트릭 유지를 하기 위해 매일 문제를 최소 하나는 꾸준히 풀어왔지만 오랜 시간 고민해서 문제를 푼 게 아니라 쉬운 문제만 골라서 풀었습니다(오늘도 브론즈4 품…). 가끔 백준 대회나 앳코더 대회 같은 거에 참가해서 알고리즘에 손 뗀 대가를 확인하긴 했지만 시간이 없다는 핑계로 애써 무시했습니다. 알고리즘 스터디도 지금까지 하고 있지만 제가 스터디장임에도 불구하고 어느 순간부터 커리큘럼을 제대로 짜서 진행하지 않았습니다. 거의 일 년째 손을 뗀 상태지만 이제라도 다시 코테 준비를 제대로 해야 하는데요…알고리즘 문제를 잘 푸려면 어떻게 해야 할까요? 다음은 제가 생각해서 내린 결론입니다.

  1. 얼마나 오래 고민할까?
    1. 문제마다 달랐지만 한 때 저는 안 풀리는 문제가 있다면 일주일 넘게 고민한 적도 있습니다. 어떤 문제는 한 달이 넘는 시간 동안 조금씩 생각해서 결국 풀어낸 적도 있습니다. 밥 먹을 때도 고민했고, 자기 전에 좋은 방법이 생각나면 메모해두고 일어나자마자 시도한 적도 많습니다. 그런데 이 방법은 학부생이거나 취미로 알고리즘 공부하는 사람에게나 어울리지 우리 같은 취준생에겐 적합하지 않을 것 같습니다. 전종섭 멘토님 말에 따르면 본인은 30분에서 1시간 정도 고민해보고 안 풀리면 그냥 정답 코드를 읽었다고 합니다. 그리고 며칠 뒤에 다시 풀어보는 방식으로 코테 준비를 했다고 합니다. 저는 이러한 방법이 취준할 때는 효율적이라고 생각합니다.
    2. 그리디나 구현/시뮬레이션 문제라면 오래 고민해도 좋을 것 같습니다. 그런데 진짜 아예 어떤 방법으로 풀어야할지 감도 안 잡히면 저는 그냥 빠르게 정답 코드나 힌트를 찾아봅니다.
  2. 백준 / 프로그래머스 / 코드포스 / 앳코더
    1. 일단 저는 백준으로 공부를 시작했기에 주로 백준 문제들을 풀어왔습니다. 가끔씩 백준 대회에 참가하거나 늦은 시간대라 귀찮긴 하지만 앳코더 대회도 몇 번 참가해봤습니다. 일반적인 코테 수준보다 더 높기에 대회 문제를 풀어보고 제 수준을 깨닫고 좌절한 적도 있습니다. 아 물론 변명을 하자면 위에서 말씀드린대로 알고리즘 공부에 손 뗀지 오래되었기에 그렇다고 할 수 있겠네요ㅎㅎ… 하지만 최근 들어서 그냥 카카오 기출 같은 것을 푸는 게 가장 좋은 것 같다는 생각이 듭니다. 왜냐하면 적당한 난이도에 잘 만들어진 좋은 문제를 선별하기도 귀찮고 대회 문제는 코테 대비용으로 풀기엔 쓸데없이 어렵기만 하니까요. 카카오 문제 정도면 기업 코테 중에서 난이도가 가장 어려운 수준이니 이것만 많이 풀어봐도 충분할 것 같다는 생각입니다.
  3. 그런데 어떻게 푸나? 꿀팁이 있나?
    1. 예전에 나연님에게 알려준 방법인데 저 같은 경우는 이렇게 문제를 푸려고 합니다. 우선 분할 정복(알고리즘 말하는 거 아님)입니다. 문제를 쪼개서 생각하면 쉬워지는 것 같습니다. 문제를 풀 때 필요한 게 무엇인지 곰곰이 생각하면서 쉽게쉽게 쪼개면서 고민해보는 겁니다.
    2. 위와 관련된 건데 단순한 것부터 생각하면 쉽게 느껴지는 것 같습니다. 특히 그리디나 DP 문제 풀 때 적극적으로 쓰는 방법인데, 간단한 테스트 케이스를 떠올려서 어떻게 될지 생각해보는 겁니다.
    3. 비슷한 문제 생각해보기. 아마 대부분의 문제는 우리가 이미 풀었던 적 있는 유형이겠죠..?
    4. 머리 속으로 생각하지말고 펜으로 직접 써가면서 고민하기.
    5. 가끔씩이라도 대회나 코테에 참가해서 실전 감각 익히기.
    6. 아무튼 많이 풀수록 실력은 오른다.


물론 저도 말만 번지르르하게 썼지 많이 어렵습니다만, 제가 생각한 방법입니다.
결론을 말하자면…여러분, 저랑 코테 준비 스터디 같이 하실래요?