백준 플레티넘을 달성했습니다.
되도록 저에게 떳떳하게 플레에 달성하고 싶은 마음이었지만, 그러지 못한 거 같아 아쉬움이 많습니다.
아쉬움과 관련한 내용은 뒤에서 플레티넘에 도전하며 느낀점과 계기와 함께 이야기 해보려 합니다.
플레티넘을 목표로 하게 된 계기
요즘 대부분의 기업이 코딩테스트를 필수로 응시하고 있고, 기업에게 저를 어필할 수 있는 기회는 당연하게도 코딩테스트 이후입니다.
내가 아무리 좋은 포트폴리오를 가지고 있다고 하더라도, 코딩테스트라는 수문장을 넘어서지 못하면 말짱 도루묵인 셈이지요
저의 최초의 목표는 플레티넘이 아닌 골드였습니다
2021년 전역 이후 백지 상태로 복학을 하려고 하니, 당시에 프로젝트 경험도 없고, 관련 지식 조차 전무한 상태였기에
어쩌면 그 당시 저에게 코딩테스트의 기반을 다지는 것이 가장 "합리적인 선택" 이라고 생각이 들었기 때문입니다.
다른 사람에게는 벽이라고 느낄수 있는 코딩테스트가 저에게는 얕은 언덕으로 느껴지도록 하는 것이 목적이었습니다.
2021년 겨울, 처음엔 알고리즘이나 자료구조에 대한 지식도 거의 없이 감부터 잡자는 생각에 주먹구구식으로 풀었습니다.
문법조차 제대로 모르는 상황에 문법 이해도를 묻는 브론즈 문제 위주로 많이 풀었던 거 같네요.
나름 바쁜 학부 생활을 보내며 2022년 2학기 여름방학이 되었고, 이 떄 목표는 여전이 "백준 골드 달성하기" 였습니다.
그리고 이때 SW 마에스트로에 관심이 생겼고, SW 마에스트로 코딩테스트 통과를 목표로 여름방학을 보냈습니다.
SW 마에스트로 코딩테스트 통과와 백준 골드 달성하기는 사실상 같은 방향이었기에, 문제를 푸는 것 만으로
두 가지 목표에 가까워 짐을 느껴 하루하루 문제 푸는 것이 즐거웠습니다.
매일 문제를 풀다보니 골드의 문턱은 생각보다 쉽게 넘을 수 있었습니다.
그럼에도 불구하고 여전히 부족하다는 생각은 변함이 없었기에 더욱 열심히 했던 거 같습니다.
겨울방학이 되고, 플레티넘을 목표로 다시 매일 풀었습니다.
결국 플레티넘을 달성했지만, 아쉬움이 많이 남았습니다.
언어 선택 과정
골드를 목표로 처음 시작했을 무렵인 2022년 겨울부터 C++로 코딩테스트를 준비했었습니다.
이유는 복학하는 첫 학기에 배우는 언어가 C++이었기 때문에 미리 문법에 익숙해지자는 취지였습니다.
물론, C++를 실제로 코딩테스트에서 많이 사용하기도 하구요.
여름방학이 되고 나서 언어를 자바로 바꿀지, 파이썬으로 바꿀지 고민했는데
자바는 문법조차 모르는 상황이었으니, 쉽고 편한 파이썬을 선택했습니다.
문제 해결 접근 방법을 익히면 나중에 언어를 무엇으로 바꾸더라도 큰 차이는 없겠다는 생각도 있었구요.
자바를 배운 이후인 겨울방학부터는 파이썬에서 자바로 언어를 바꿨습니다.
스프링을 기반으로 한 백엔드 개발자라는 목표가 생긴 입장에, 굳이 파이썬으로 코딩테스트를 볼 이유가 없다고 생각했습니다.
느낀 점
어느정도 문제를 보는 눈이 생겼던 거 같습니다.
"이 문제는 아마 dp일거야!" 같이 문제의 카테고리를 모르는 상황에서 해당 문제의 카테고리를 유추하고
그 풀이방법이 맞을 것이다 라는 눈치가 생겼다고 할까요. 물론 틀리는 경우도 너무 많지만요.
문제의 카테고리를 처음부터 잘못 잡고 시작하면 몇 시간을 머리잡고 풀어도 안 풀리고 해당 방법에 매몰되어버렸던 거 같습니다.
키보드보단 펜을 잡는 시간이 더 길어야 한다
내가 머리가 좋아서 그냥 문제를 읽으면 알고리즘이 바로 떠오르고 시간 복잡도와 범위를 고려하여
그 내용을 바로 키보드로 옮길 수 있는 수준이 아닌 이상
종이에 이 문제가 어떤 카테고리로 풀어야 할지 생각해보고 구현방법 등등을 모두 기록하고나서 풀었다 싶으면
그때 그 내용을 코드로 옮기는 것이 문제 해결의 최상의 시나리오가 아닐까 싶습니다.
DP는 너무너무 어렵다
풀면 풀수록 어려운 게 DP였습니다.
이게 왜 DP야? 어떻게?
라는 생각이 자주 들었습니다. 문제 해결의 감이 잘 오지 않을 때, 문제 카테고리를 확인하면 뜬금없이 DP인 경우가 많더라구요.
그리디도 너무너무 어렵다
그리디는 어떻게보면 쉬울 수 있지만 저에겐 너무 어려웠습니다.
이 문제를 그리디하게 접근했을 때, 그 방법이 최적해를 보장한다고 증명하는 게 어렵고 머리아픈 일이었습니다.
구현은 건실하고 꼼꼼하게
시뮬레이션 구현 문제는 대부분 특정 알고리즘을 요구하기보다 구현 능력 그 자체를 보는 거 같습니다.
문제의 설명과 더불어 예외적인 상황까지 고려해서 짜야하구요.
처음 정했던 방향성이 잘못되었거나, 일부 예외를 인지하지 못하고 만들게 되면 이미 짜놓은 코드를 갈아엎어야하는
경우가 더러 있었습니다.
그 현실을 부정하고 싶어서 그 상태에서 고치려고 코드가 더러워지는 건 덤이구요.
그래서 구현은 처음이 정말 중요하다고 느낀 거 같습니다.
처음에 중심을 딱 잡고 풀어야 막힘없이 풀 수 있었던 거 같네요.
이제와서 남는 아쉬움
너무 티어에 목매며 풀었던 거 같습니다.
플레티넘까지 50점 남았을 무렵, 골드 2~3 문제를 힘들게 풀어내도 3점, 5점도 주지 않는 상황에 너무 막막하기도 했었고
그렇기에 오히려 플레티넘이라는 숙원사업을 더욱 이루고 싶었습니다.
그리고 저의 목표는 기업 코딩테스트에 대한 부담을 줄이는 것이었는데,
플레티넘에 도전하기 위해서 풀어야 하는 문제는 그와 동떨어진 것들이 많았습니다.
비트마스킹을 이용한 DP, 트리에서의 DP, 세그먼트 트리, KMP 등..
사실 이 문제들을 해결하기 위한 테크닉과 사고력이 도움이 분명히 되겠지만, 굳이? 싶기도 했습니다.
물론 위 나열한 알고리즘은 사용할 줄 모릅니다ㅋㅋ
앞으로의 목표
아무래도 기업 코딩테스트 합격을 목표로 시작하였다보니,
최근 제가 풀려고 노력했던 문제들은 그 목표와는 약간은 결이 다른 부분이 많았기에
이제부터는 정말 진득하게 유형별로 문제 접근 방법같은 것들을 배워보려고 합니다.
속 빈 강정이 아닌, 속이 꽉 찬 강정이 되게끔 말입니다.
'잡담' 카테고리의 다른 글
2024년 돌아보기 (0) | 2024.12.20 |
---|---|
멋쟁이 사자처럼 대학 12기 해커톤 후기 (0) | 2024.08.07 |
SSAFY 인턴 1기 수료 후기 (0) | 2024.07.12 |
나는 우물 안 개구리가 아니라 올챙이다 (0) | 2024.01.15 |