전체 글
전예홍 - 『Do it! 타입스크립트 프로그래밍』
학습 기간: 2022.08.07 ~ 2022.10.11 0. 소기의 목적대로 이 책을 공부하게 된 계기는 TypeScript의 기본기를 다지기 위함이었다. 여러 TypeScript 책들 중에서도 이 책이 처음 발판을 딛기에 괜찮아 보였고, 이에 따라 학습을 시작했다. 그리고 그 결과는, 결론부터 말하자면, 이 책은 초반부는 쉬웠고 후반부는 어려웠다. 그러니 오늘의 블로깅 전략은, 소기의 목적을 그대로 따르고자 한다. 말하자면 TypeScript의 기본 용법을 정리하는 데에만 초점을 두겠다는 뜻이다. 반복기와 생성기, 함수 조합, ramda와 Monad 부분은 실제 써보지 못한 기술을 정리하자니 체감이 잘 안 되었기 때문에, 다음에 기회가 닿는다면 그때 또 따로 진득하게 정리해보기로 하자. 1. What ..
정선용 - 『아들아, 돈 공부해야 한다』
읽은 기간: 2022.9.19 ~ 2022.10.2 0. 반성합니다 - 사놓고 안 읽는 책 읽기 모임 요즘 부트캠프에서 열리는 이벤트들에 적극 참여해보고 있는데, 그중에서도 온라인 독서 모임이 내 흥미를 강하게 이끌었기 때문에 참여해서 열심히 책을 읽어보고 있다. 필자는 원래 책을 읽을 때 시간을 얼추 정해놓고 그 시간 동안 마음 내키는대로 책을 읽는 편이었다. 그런데 독서 모임에 참여해서 하루 분량을 정해두고 책을 읽다보니, 확실히 목표의식이 생겨서 더욱 열심히 읽게 되는 느낌이 들었다. 그리고 매일 디스코드에 인상 깊은 구절을 공유하다보니, 이 책을 안 읽는 다른 사람에게도 도움이 될 만한 구절을 찾기 위해서라도 더욱 꼼꼼히 읽게 되었다. 이번 경험이 만족스러웠기에, 앞으로도 독서 모임에 계속 참여해..
Redux... 너란 녀석
0. Redux를 배우게 된 계기 요즘 회사에서 Redux 기술을 사용하고 있기 때문에 나도 이 기술과 진득하게 대면하게 되었다. 기왕 배울 거 기본부터 제대로 배우기 위해 생활코딩 님의 무료 Redux 강의를 들었으며, 이를 통해 배운 내용들을 정리해보려고 한다. 1. Redux [생활코딩 - Redux] 개요 A predictable state container for JavaScript app JS로 만든 애플리케이션을 위한 예측 가능한 상태들의 연속 애플리케이션의 복잡성을 낮추고, 우리의 코드가 어떤 결과를 가져올지 예측 가능하게! Single Source of Truth Redux는 하나의 상태이며, 상태는 그냥 객체 Redux는 하나의 객체에 애플리케이션의 모든 데이터를 중앙 집중적으로 모아서..
블라드스톤 페헤이라 필루 - 『한 권으로 그리는 컴퓨터과학 로드맵』
읽은 기간 : 2022.07.10 ~ 2022.07.16 익숙한 내용들 지극히 개인적인 관점에서 봤을 때 이 책도 저번에 들었던 『비전공자를 위한 이해할 수 있는 IT 지식』과 마찬가지로, 너무 아는 내용들이 많았다. 최근에 안 그래도 Algorithm & Data Structure를 많이 공부하고 있는데 이 책에서 또다시 List, Linked-List, Stack, Queue, Priority Queue, Map, Tree, Graph 등의 익숙한 자료구조들이나, Greedy, DP, N-Queen 등의 Algorithm 문제들을 다시 보자니 아무래도 겹치는 부분이 많았다. 그래도 CPU나 RAM 등의 컴퓨터 기본 구조와 운영체제에 대해 깊게 다뤄주는 부분이 있어서, 비록 한 Chapter에 불과한 ..
Two Pointers
개념 문제를 풀기 위해 봐야 할 넓은 영역 중에서 볼 필요가 없는 부분들은 가능하면 안 볼 수 있게 하는 알고리듬 화살표 2개에 의미를 부여해서 탐색 범위를 압축하는 방법! 대표적인 카테고리 1차원 배열 위에 2개의 포인터를 만드는 경우 관찰을 통해 문제에 등장하는 변수 2개의 값을 포인터로 표현하려는 경우 포인터를 조작하는 방향에 대해서 2개의 포인터를 같은 방향으로 이동 2개의 포인터가 양끝에서 서로를 향해 이동 Two Pointers 문제들이 가지는 키워드 1차원 배열에서의 "연속 부분 수열" or "순서를 지키며 차례대로" 곱의 최소 문제 풀이 BOJ 1806 - 부분합 난이도 : 3 10
Binary Search
개념 정렬이 보장되어 있는 배열에서 특정 기준을 가지고 배열을 이분하면서 탐색하는 방법 시간복잡도 : O(log N) 활용 방안 항상 전형적인 변수 세팅을 가지고 시작 L : 탐색할 가치가 있는 왼쪽 끝 index R : 탐색할 가치가 있는 오른쪽 끝 index result : 탐색한 x의 위치 로직 L과 R 사이의 가운데 지점의 값을 확인하면서 L과 R을 계속해서 옮겨주고, 최종적으로 x와 일치하는 값, 혹은 x와 가장 가까운 값을 찾아냄 L > R 이 되어버리면 탐색할 가치가 있는 구간이 더이상 없다는 뜻 효율성 구간의 길이는 N → ½ N → ¼ N → ... → 1 의 방식으로 점점 좁아짐 총 비교 횟수는 구간의 변화 횟수인 O(log N) 예를 들어 N이 10만이라면 약 16번만 비교해도 되는 ..
Sort Application
활용 방안 자바의 경우 Comparable을 활용해서 구현 가능 static class Element implements Comparable { public int idx, num; @Override public int compareTo(Element other) { return num - other.num; } // 음수 값이 나오면 내가 먼저, 양수 값이 나오면 other가 먼저 // 위 비교식은 오름차순 정렬 } 시간복잡도 : 약 O(N log N) 각종 복잡한 Sorting Algorithm들은 차치해두고 자바의 Arrays.sort(arr) 메소드를 기준으로 봤을 때 sort 메소드는 Primitive 원소의 경우 Dual-Pivot Quick Sort를, Object 원소의 경우 Tim Sor..
Brute Force
개념 정답을 무조건 구하는 치트키 문제를 해결하기 위해 가능한 경우의 수를 모두 탐색 특히 backtracking, 재귀 함수를 활용해야 하는 문제 모든 코딩 테스트에서, 부분 점수라도 얻기 위해서 기본적으로 접근할 수 있어야 함 일반적으로 시간복잡도가 높은 편 종류 (문제 유형) N개 중에서 중복을 허용하면서 중복을 허용하지 않고 M개를 순서에 따라 나열하라 골라라 N개 중에서 중복을 허용하면서 M개를 순서에 따라 나열하라 BOJ 15651 - N과 M (3) static StringBuilder sb = new StringBuilder(); static int N, M; static int[] selected; static void recursive(int k) { if (k == M + 1) { f..
Kotlin in Action Part 1. 코틀린 소개
Chapter 01 - 코틀린이란 무엇이며, 왜 필요한가 대상 플랫폼 = 자바가 실행되는 모든 곳 자바가 사용되는 모든 용도에 적합하면서 더 간결하고 생산적이며 대체 가능한 언어를 만드는 것이 주목적 일반적으로는 Backend 서버 상의 코드와, 안드로이드 디바이스에서 실행되는 모바일 애플리케이션에서 사용됨 정적 타입 지정 언어 자바와 마찬가지로 코틀린도 정적 타입(statically typed) 지정 언어 정적 타입 지정 : 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고, 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해주는 것 코틀린의 타입 추론(type inference) : 대부분의 경우 프로그래머가 변수 타입을 명시하지 않아도 컴파일러가 유추 정적 타입..