자바스크립트 코딩스터디를 시작한 지 벌써 한 달이 훌쩍 넘었다.
사실 1년 넘게(그 중에 공백도 있었지만) 코딩테스트 스터디는 python으로만 했었는데, 그 이유는 가장 처음에 접한 언어이기도 하고 무엇보다 러닝 커브가 높지 않아서였다.
그런데 일을 다닐 때도, 작년 이맘때쯤에도,
프론트엔드 개발자라면 JavaScript로 코테 볼 줄 알아야지
하는 말을 수없이 들으면서
언젠간 JavaScript로 준비를 해야겠다 마음을 먹었었다.
하지만 행동으로 확실하게 옮긴 것은 한 달 조금 넘었던 것이다.
아무튼 지난 회고에도 언급했듯이, 넘블 챌린지에서 같은 기술스택을 바라보는 개발자분을 만나게 돼서 함께 취준하면서 스터디를 시작했다.
개발자 취업 준비... 포트폴리오, 이력서, 프로젝트, 코딩테스트...
할 게 너무 많다...
심지어 그것을 하나씩 달성하는 게 아니라 모든 것이 동기적으로 이루어져야 한다.
그런데 그 중에 난 코딩테스트 준비를 가장 좋아하고, 잘한다.
(근데 요즘엔 이것만 하는 것 같다... 그러면 안되는데!)
처음에 코딩테스트의 존재를 듣고 몇 문제를 풀었을 때, 초등학교 수학 경시대회 문제를 풀던 때로 돌아간 것 같아서 좋았다.
그 때의 난 수학에 참 자신 있었으니깐, 물론 지금은 아니다.
그리고 답만 내서는 안되고, 풀이과정을 제출해야한다는 점, 같은 문제라도 정말 참신한 풀이가 있다는 점 등 매료되는 부분이 많아서 꾸준히 했다.
무엇보다 갈수록 전에는 통과못했던 코딩테스트를 시간이 갈수록 통과한다는 결과가 나에게 큰 성취감을 안겨줬다. 그래서 계속 문제 푸는 것을 멈추지 못한다.
알고리즘을 꾸준히 공부하고 싶었고, 그 점에 있어 크게 동기부여를 하기 위해
눈에 바로 보이는 순위를 상승시키는 것을 목표로 삼게 됐다.
처음에는 39,000위대
였다.(23.08.01)
(cf. 백준은 16,000위대
이다(23.09.01 기준))
그래서 여기서 얼만큼 올려야지 공부 좀 열심히 했다고 볼 수 있을까...하다가
1/2만큼 순위를 줄이면 좀 했다고 볼 수 있지 않을까 해서
(뭔가 백준 그리디나 수학 문제에서 볼 법한 계산 방식)
8월 내로 달성할 목표를 15,000위
로 잡았었다.
짜란~!
음 표랑 그래프로 정리하니 아주 보기 좋군.
9월은 다른 목표를 잡았지만, 그래도 주차별 스냅샷을 찍어놔서 자료정리를 해보면 재밌을 것 같다.
해결한 문제만 보더라도 4주에서 5주차 넘어가는 주에 많이 풀었다.
주차별 스냅샷 찍기
처음과 끝에 대한 결과만 있었다면, 꾸준히 열심히 했겠거니, 정확한 추이를 파악하기 힘들었을 것이다. 그리고 주차별로 목표를 다시 다짐하고, 이미 달성했을 경우 더 높이 잡은 덕분에 예상했던 것보다 훨씬 결과를 잘 냈던 것 같다.
그리고 목표는 항상 크게, 그리고 작은 것을 주단위, 하루단위, 시간단위로 나눈다면 목표 달성을 쉽게 할 수 있다는 통념에 따라 작은 단위로 기록을 남겼던 것 또한 의미가 있었다.
앞서 이야기했다시피, 9월에도 쭉 캡쳐로 기록을 해두어야 겠다.
남의 코드에서 뺏어오기
문제를 푼 것에서 끝내는 것이 아니라, 다른 사람의 풀이 보기
로 넘어가서 남의 코드에서 배울 수 있는 점을 매번 훔쳐왔던 것 같다. 직접 돌려보면서 실행시간도 비교해보고, 가장 좋아요를 많이 받은 이유에 대해서도 고민을 해보았다.
비록 알고리즘일지라도 다른 사람이 읽었을 때 좋아보이는 것은,
참신한 방법이라서/읽기 좋은 코드라서/효율이 좋아서(이 이유는 드물다)
등이 있는데, 어느 이유로든 익혀두면 좋겠다고 생각해서 꼭 읽어보는 편이다.
가끔가다 그냥 미친 코드도 있긴한데, 그것 또한 사람들의 반응을 보면 재밌다.
예시1) 최다 좋아요 수 추가
예시2) 더 간단하게 표현하는 우수 코드
예시3) 로직은 유사하나 효율성이 더 좋은 코드
도구 활용
같은 팀원분께서 알려주신 건데, 백준, 프로그래머스 문제를 풀면 자동으로 푸시되는 크롬 익스텐션인 BaekjoonHub로 아주 큰 덕을 보았다.
이전에는 백준은 vscode에서 테스트하고 제출을 반복해서 푸시하는 게 크게 번거롭지 않았는데, 프로그래머스는 정말 귀찮았다.
더불어 혼자하는 게 아니라 스터디 형식으로 하느라 레포지토리나 이것저것 환경설정할 것들이 있었는데, 그 과정 또한 재밌었고, 나중에 시간이 나면 블로그 글로도 써보려고 한다.
아무튼 덕분에 단지 화면공유해서 설명하는 게 아니라 PR로 착실히 올려서 개발자처럼 스터디했던 것 같아서 정말 만족스러웠다.
이만큼 열심히 했어요!
코딩 기초 트레이닝과 코딩테스트 입문을 다 풀지 못했다
이번 달 내에 꼭 다 풀고 싶었는데, 아쉽게도 각각 몇 일을 남겨두고 풀지 못했다. 정말 아쉽다.
거의 다 풀었는데! 그래서 이번 주내로 꼭 다 풀고 완성된 캘린더를 업데이트하고자 한다!
순위에만 연연했다
프로그래머스의 순위는 점수와 직접적인 관계가 있지만 정확히 어떤 수치로 얼만큼 오르는지는 모른다.
그러나 문제 하나당 최소 점수가 1점이라는 점,
다른 사람이 풀지 못한 방법으로 풀거나 효율성이 아주 좋다면 점수가 높다는 점,
자신의 현재 점수와 문제 난이도에 따라 얻는 점수가 다르다는 점.
이 사실을 알고 있었는데, 나는 무식하게 첫 번째 사실만으로 난이도 상관없이 문제를 무작정 풀자에 집중했다. Lv2나 Lv3도 넉넉히 풀면서 고급 알고리즘도 대처할 수 있는 역량을 길렀어야 했는데, 이번에는 기초에만 매몰되어 그러지 못한 것이 아쉽다.
하지만 덕분에 기초 문제에서 JavaScript 메서드 체이닝을 연습하여 이제는 좀 익숙해진 것은 만족스럽다.
(KEEP에 가야할 것 같지만 그래도 생각난 김에 여기서 자랑하기)
예시1) 수열과 구간 쿼리 4
예시2) 숨어있는 숫자의 덧셈(1)
실제 기출문제를 주에 세 문제 이상
풀어보면 좋을 것 같다.사실 초반에 랭크 올리기는 쉽기 때문에 3만 2천등
올린 게 별 거 아닐 수도 있다.
하지만 현재 깨지고 또 바스라져 유리조차 아닌 모래 멘탈을 가진 취준생에게...
이런 소소한 성취를 통해 스스로에게 만족을 얻는 것은 충분히 가치 있는 경험이라 생각한다.
하지만 언제든지 자만은 금물. 작은 목표를 달성하고 또 다시 더 높은 목표를 정해서 계속해서 스스로 할 수 있는 사람이고 더 나아갈 수 있는 사람이란 것을 가르쳐줘야겠다.
(비공식 목표를 한 번 확언하자면, 9월달 내로 700등
내로 들어보고 싶다!)
(더불어 백준도 골드 I
, 11,000위
달성하기!)