1. 학습
📖 학습 요약
이번 주까지 기본적인 알고리즘 개념들을 익히고, 관련된 문제들을 푸는 방식으로 학습이 진행되었다. 큐 / 해시테이블 / 트리 / 힙 / 트라이 / 정렬 / 이진탐색 / BFS, DFS / 그리디를 다루었다. 올해 초에 알고리즘 학습을 진행하며 구현해놨었던 코드들과 비교해보며 개념들을 다시 한 번 정리하였다.
🔎 새로 알게된 것
1. 트라이라는 개념을 처음 접하게 되었다. 앞서 말했듯 대표적인 알고리즘들을 한 번씩은 익혔다고 생각했었는데, 하마터면 계속 모를 뻔했다. 트라이는 문자열을 효율적으로 탐색하기 위한 알고리즘으로, 한 글자씩 붙을 때마다 계층 정보를 갖는 노드(현재 값 Value와 맵구조의 Children 프로퍼티를 가짐)가 생성된다. 검색 서비스의 자동완성 기능을 예로 들어 쉽게 이해할 수 있었고, 실제로 이번 주 과제에서 관련 개념이 사용되었다. 며칠 전 스터디에서 풀었던 압축 문제가 생각나기도 하였다.
2. 큐(Queue)에서 Shift() 메서드를 쓰지 말 것! 큐는 선입선출 개념을 갖는 선형 자료구조로, 배열 혹은 연결리스트로 구현할 수 있다. 그러나 배열을 통해 맨 앞요소를 제어할 경우 배열을 땡기는 과정에서 선형 시간이 소요되기 때문에, 연결리스트를 이용해 구현하는 것을 권장한다고 한다. 같은 맥락에서 Shift() 메서드 또한 Queue에서 기대하는 로직이 수행되지 않아 사용하는 것을 권장하지 않는다고 한다.
i) Shift 없이 배열을 이용한 큐 제거 구현 : delete로 첫 번째 원소를 삭제하고 포인터를 옮겨 주었다.
dequeue() {
const value = this.queue[this.front];
delete this.queue[this.front];
this.front++;
return value;
}
ii) 연결리스트를 통한 큐 제거 구현 : 연결을 끊고 포인터를 이동, 큐의 크기를 감소시켜주었다.
dequeue() {
const shift = this.head.value;
this.head.next = this.head;
this.size--;
return shift;
}
3. 실습 간 진행한 베스트앨범 문제에서 Map구조를 활용하였는데, Spread구문과 entries()메서드를 통해 iterable한 배열 형태로 변환하거나 flatMap을 통해 배열을 평탄화하는 등의 함수형 프로그래밍 스킬 또한 새롭게 익힐 수 있었다.
1. Map -> Array 변환
return [...Map.entries()]
2. Nested한 배열 평탄화 (예시)
return arr.flatMap((item)=>item[1].songs)
✏️ 과제
첫 번째 과제도 진행되었다. 과제에 대한 자세한 내용을 언급할 순 없지만, 학습한 개념들을 응용하여 추가적인 기능을 구현하는 방식으로 이루어졌다. Branch 작업이나 PR을 날리는 과제 제출과 관련해서도 걱정을 했었는데, 가이드가 굉장히 친절하게 되어있어 큰 어려움 없이 해결할 수 있었다. 과제를 진행하며 느꼈던 건 강의 간 학습한 내용들을 제대로 알고 가는 것이 중요하다는 것이다. 알고 있었던 내용들은 가볍게 듣고 넘기기도 했는데, 결국 과제를 진행할 때 다시 강의를 듣고 있는 나를 발견했다. 두 번 세 번 시간 낭비하지 않게 할 때 더 제대로 하리라 또 한 번 되뇌였다.
📚 스터디
지난 주에 스터디에 대한 고민이 많다고 했었는데, 이제 어느 정도 윤곽이 잡혀 본격적으로 시작하려 한다. 팀원들과 사이드 프로젝트를 진행하기 전 약 2주 동안 타입스크립트를 학습할 계획이다. 프로젝트 주제나 진행 방식은 타입스크립트 학습과 병행하여 커피챗 시간이나 스크럼 간 결정할 듯 하다.
2. 앞으로
1. 배운 알고리즘 내용들에 대한 실습을 진행하면서 레벨3, 4 문제들도 접했는데 접근부터 구현까지 쉬운게 없었다. 해설을 보면 이해가 가지만 처음부터 구현하려하면 막히는 경우가 꽤 있었다. 결국 코테가 커리어의 첫 관문이기 때문에 더 세심하게 준비해야할 필요성을 느꼈다.
2. 이번 주는 명절 연휴가 껴있어 뒷심이 좀 약하지 않았나 싶다. 주중으로 사이드 프로젝트 커피챗과 자바스크립트 세션도 예정되어 있고, 과제도 생각보다 시간이 많이 소요될 것 같아 쫓기지 않게 미리 할 수 있는 것들을 준비해놓으려 한다. 3주차에 들어선만큼 시스템이나 분위기에도 어느 정도 적응이 되었으니, 잘 쉰만큼 또 열심히 달려볼 예정이다. 화이팅 ..