1주차의 난이도가 무색해질 만큼 어려웠던 것 같다. 사실 주어진 모든 문제를 푼 날이 적다.
개념을 이해하는 것도 좀 더 시간이 걸리고, 문제를 잡고 있는 시간을 제한해도,
책이나 블로그의 정답 코드를 확인할 때, 이해하고 공부하는 시간이 꽤 걸렸기에 진도가 느렸던 것 같다.
풀어보려 노력하는 문제는 한두 문제로 가져가고, 그외엔 잘 모르겠으면 가급적 빠르게 책을 보려고 노력했다.
알고리즘에 부담을 덜고 접근하니까 주어진 분량을 다 파헤치진 못 해도, 배우고 쌓는다는 느낌은 들었고,
잊어버린다거나 해도, 다음에 다시 내용을 본다거나, 코드를 보면 기억이 날 정도로 기본적인 개념과 구조 이해는 잘 챙겨 가려고 노력했던 것 같다.
이제는 더욱 주어진 강의 내용으로 전부 이해하기 힘들어서, 책 <파이썬 알고리즘 인터뷰>나 다른 강의도 많이 봤다.
대체로 책이 좀 더 효율적이었고 개념을 가져가기 좋았다. 책만큼은 아니더라도 유튜브 영상 두세 개 정도 보는 것도 좋았다.
BFS와 백트래킹은 DFS의 연장선 느낌이었는데, 트리 구조, 힙, 정렬이라는 새로운 개념들을 배운 것은 재미있었다.
트리는 또 DFS와 BFS의 연장 느낌이기도 했는데, 어려우면 참 어렵기도 했지만, 이진 트리, 완전 이진 트리, 이진 탐색 트리와 힙의 차이 등 재밌었다.
특히 O(log n)의 시간 복잡도를 갖는 게 뭐가 있을까 했는데 이번 주차에 꽤 느껴 본 것 같다.
우선순위 큐라는 ADT(추상 자료형)를 구현할 때 리스트나 연결 리스트보다 힙이 여러 모로 낫다는 것도 이해했다.
정렬은 아직 덜 배우긴 했지만, 파이썬의 내장 정렬 함수는 팀소트라는 굉장히 효율적인 구성으로 사실, 개념에 비해 구현이 참 쉽지 않지만
내장 함수의 효율성이 크다는 것을 안 것도 좋은 거 같다. 다만 이외 일부 언어에서는 정렬도 구조를 구현해야 하는 경우가 꽤 있는 듯하다.
같은 심화 트랙의 동기들을 봐도 못 푸는 문제가 생기기도 하고, 이야기를 나눠보니 확실히 어려워졌구나를 느꼈다.
물론 그들은 여전히 나보다 잘 풀고, 더 많이 문제를 경험하고 가는 느낌이다.
그래도 같은 느낌을 공유하니 내가 보폭이 작을 수는 있어도 같은 길을 걸어간다는 느낌이 들어서 좋았다.
더 열심히 더 잘하도록 하면 좋겠지만, 나는 나의 페이스를 가져가는 것이 지금은 더 중요한 것 같다.
자꾸 등장하는 녀석들이 있는데, 2주차에서 어려움을 느끼는 건 비슷하지만, 쓰다 보니 노드나 연결 리스트에 익숙해지는 느낌이다.
물론 아직 부족함을 느낀다. 리트코드 147번(책 500p)의 <삽입 정렬 리스트>의 코드가 이해가 되다 말다 하는 것을 보면 그렇다.
어쨌든 내가 지금 완벽하게 이 유형의 문제들을 해놓고 넘어가진 못해도, 공부와 사용을 거듭하니 익숙해지듯이
나중에라도 알고리즘과 문제들을 혼자서 공부하고 풀다 보면 결국 잘 풀 수 있다는 자신감도 붙긴 한다.
이런저런 생각 덕에 공부의 무게를 조금 내려 두고, 공부해 나가는 과정에서 심적으로 안정된 느낌이다.
하지만 여전히 DFS와 재귀 함수는 어렵다. 코드를 보면 이해가 가지만, 문제에 맞춰 재귀 함수를 설계하는 것이 생각보다 쉽지 않다.
앞으로도 최단 경로 같은 부분에서 DFS BFS는 나올 것이고, 그게 아니더라도 재귀 함수를 쓰는 부분이 많을 거 같다.
점차 나아지겠지 하면서도, 좀 더 복습이나 다른 문제를 푸는 등 공부해 보는 게 좋을 거 같기도 하다.
아직 자바스크립트 언어 공부가 원하는 진도까지 나가지 못 했다. 따라서 틈틈이 보려고 노력하는데 사실 알고리즘에도 시간이 모자라긴 하다.
그래도 식사할 때나 자기 전에는 환기하는 느낌으로 조금씩 보고, 기술매니저님이 추천해주신 유튜브 채널 코딩앙마의 JS 중급 강의도 조금 봤다.
알고리즘도 어렵디 어렵지만 재밌다고 생각하는데, JS 언어 공부도 참 재밌다. 공부하는 부분이 달라서 그런지 확실히 재미가 느껴지고 환기가 된다.
알고리즘도 그렇고 특히 JS 언어 공부는 나름 혼자 파보면서, 항해에서 제공해 준 강의에 없는 내용까지 꽤 공부했다고 생각했는데 - 기술 매니저님이
가볍게 질문해주신 부분에 꽤 잘 대답했다 - 그게 맞긴 한데, 코딩앙마의 JS 중급 강의 1강, 변수를 보자마자 그 부분이 나와버렸다.
아, 이래서 이 강의가 좋다고 추천을 해주셨구나 하고 바로 느꼈다. 아는 내용이 반은 넘겠지만, 이 강의도 꼭 봐야겠단 생각이 들었다.
이래서 리액트는 언제 하지? 싶다가도, JS를 잘 잡고 가면 짧은 주특기 주간이지만 리액트에 오롯이 집중할 수 있을 거란 생각이 든다.
아직 꽤 먼 얘기지만 리액트, 리덕스, 타입스크립트가 1차 목표이고 가능하면 넥스트도 건드려보고 싶다.
벨로퍼트(김민준)님의 책 <리액트를 다루는 기술>의 소개 글에 프론트 개발에 꽤나 불편한 점들을 React를 사용하면서 많이 해결하게 되고
프론트 개발이 재밌어졌다는 말에 너무 설렌다. 스프링 기술 매니저님이 리액트를 했을 때도 재밌었다고 하셨는데 참 기대가 된다.
그래도 우선은 남은 3주차의 알고리즘을 열심히 공부하면서, JS의 복습과 못 다한 부분의 진도를 나가고 싶다.
이번에 쓴 WIL도 가독성 떨어지는 줄글에, 얘가 프론트를 지망하는 애가 맞나 의심이 가는 정도의 디자인과 구성이다.
다만 내용만큼은 오롯이 느낀 나의 2주차, 날것의 경험과 생각이 담겨 있다.
남은 오늘을 잘 쉬고, 내일부터 다시 힘내서 나아가자.