Books

    8장 해시 테이블로 매우 빠른 룩업

    8장이 끝날 때까지 데이터를 O(1) 만에 룩업할 수 있는 해시 테이블이라는 특수한 자료 구조의 사용법을 배울 것이다. 8.1 해시 테이블 대부분의 프로그래밍 언어는 해시 테이블이라는 자료 구조를 포함하며, 해시 테이블에는 빠른 읽기라는 놀랍고 엄청난 능력이 있다. 해시, 맵, 해시맵, 딕셔너리, 연관 배열 등의 이름을 갖는다. let menu = new Map([["french fries", 0.75], ["hamburger", 2.5], ["hot dog", 1.5], ["soda", 0.6]]); 해시 테이블은 쌍으로 이뤄진 값들의 리스트다. 첫 번째 항목을 키(key)라 부르고, 두 번째 항목을 값(value)이라 부른다. 자바스크립트에서는 다음과 같은 문법으로 키의 값을 룩업할 수 있다. men..

    7장 일상적인 코드 속 빅 오

    7장에서는 지금까지 배운 내용을 토대로 현실의 코드 기반에 있을 법한 실용적인 코드 예제의 효율성을 분석한다. 코드 효율성을 알아내는 것이 최적화의 첫 번째 단계다. 더욱이 코드가 빅 오 표기법 관점에서 어떤 카테고리에 해당하는지 알면 애초에 최적화가 정말 필요한지 판단할 수 있다. 예를 들어 O(N²)인 알고리즘은 일반적으로 느린 알고리즘이므로, 최적화할 방법이 있는지 고민해봐야 한다. 7.1 짝수의 평균 const averageOfEvenNumbers = (array) => { let sum = 0; let countOfEvenNumbers = 0; for (let i = 0; i < array.length; i++) { if (array[i] % 2 === 0) { sum += array[i]; c..

    6장 긍정적인 시나리오 최적화

    지금까지는 주로 최악의 시나리오에서 얼마나 많은 단계가 걸리는지에 초점을 맞췄다. 하지만 최악의 시나리오 외에도 고려할 가치가 있는 상황들이 있다. 6-1 삽입 정렬 삽입 정렬을 배우면서 최악의 경우가 아닌 다른 시나리오를 분석하는 것에 어던 장점이 있는지 알아보자. 첫 번재 패스스루에서 임시로 인덱스 1 (두 번째 셀)의 값을 삭제하고 이 값을 임시 변수에 저장한다. 값이 없어졌으므로 공백이 생긴다. 다음으로 공백 왼족에 있는 값을 가져와 임시 변수에 있는 값과 비교하는 시프트 단계를 시작한다. 공백 왼쪽에 있는 값이 임시 변수에 있는 값보다 크면 그 값을 오른쪽으로 시프트한다. 값을 오른쪽으로 시프트 했으므로 자연히 공백이 왼족으로 옮겨진다. 임시로 삭제한 값보다 작은 값을 만나거나 배열의 왼쪽 끝에..

    5장 빅 오를 사용하거나 사용하지 않는 코드 최적화

    빅 오는 훌륭한 도구이지만 유일한 도구는 아니다. 빅 오 표기법에서는 한 알고리즘이 다른 알고리즘보다 훨씬 빠른 경우에도 두 경쟁 알고리즘을 정확히 똑같은 방식으로 표현하기도 한다. 5-1 선택정렬 선택 정렬은 다음과 같은 단계를 따른다 배열의 각 셀을 왼쪽부터 오른쪽 방향으로 확인하면서 어떤 값이 최솟값인지 결정하고 한 셀씩 이동하면서 현재까지 가장 작은 값을 기록한다. 최솟값에 어느 인덱스에 들어 있는지 알았으므로 그 인덱스의 값과 패스스루를 처음 시작했을 때의 값을 교환한다. 첫 번째 패스스루의 시작 인덱스는 0이고, 두 번째 패스스루의 시작 인덱스는 1일 것이다. 매 패스스루는 1, 2 단계로 이뤄진다. 배열 끝에서 시작하는 패스스루에 도달할 때까지 패스스루를 반복한다. 5-2 선택 정렬 실제로 ..

    4장 빅 오로 코드 속도 올리기

    빅 오를 사용하면 내가 만든 알고리즘과 세상에 존재하는 범용 알고리즘을 비교할 기회가 생긴다. 4-1 버블정렬 정렬 알고리즘 ?: 컴퓨터 과학 분야에서 폭넓게 연구된 주제이며, 수년간 수십개의 정렬 알고리즘이 개발돼 있다. 정렬되지 않은 배열이 주어졌을 대, 어떻게 오름차순으로 정렬할 수 있을까?에 대한 문제를 해결한다. 배열 정렬의 단계 배열 내에서 연속된 두 항목을 가르킨다. 처음에는 배열의 첫 번째 원소부터 시작해서 처음 두 항목을 가르킨다. 첫 번째 항목과 두 번째 항목을 비교한다. 두 항목의 순서가 뒤바뀌어 있으면 두 항목을 교환한다. 순서가 올바르다면 2단계에서는 아무것도 하지 않는다. 포 배열의 끝까지 또는 이미 정렬된 값까지 1단계부터 3단계를 반복한다. 이것을 배열의 첫 패스스루라 끝났다..

    3장 빅 오 표기법

    컴퓨터 과학자는 서로 간에 시간 복잡도를 쉽게 소통할 목적으로 자료 구조와 알고리즘의 효율성을 간결하고 일관된 언어로 설명하기 위해 수학적 개념을 차용했다. 이러한 개념을 형식화한 표현을 빅 오 표기법이라고 부른다. 빅 오 표기법을 사용해 주어진 알고리즘의 효율성을 쉽게 분류하고 이해시킬 수 있다. 3-1 빅 오 : 원소가 N개일 때 몇 단계가 필요할까? 빅 오는 특정 방식으로 알고리즘에 필요한 단계 수를 고려함으로써 일관성을 유지한다. 최악의 경우 선형 검색에는 배열의 원소 수만큼의 단계가 필요하다. 빅 오 표기법으로는 O(N)이라 표기한다. O(N)은 데이터 원소가 N개일 때 알고리즘에 N단계가 필요하다. 배열에 원소가 N개일 때 선형 검색에 몇 단계가 필요할까? 선형 검색에는 N단계가 필요하므로 O..

    2장 알고리즘이 중요한 까닭

    알고리즘 : 어떤 과제를 완수하는 명령어 집합 컴퓨팅 관점에서 알고리즘은 특정 과제를 달성하기 위해 컴퓨터에 제공되는 명령어 집합을 뜻한다. 즉, 어떤 코드를 작성하든 컴퓨터가 따르고 실행할 알고리즘을 만드는 것 2-1 정렬된 배열 정렬된 배열은 값이 항상 순서대로 있어야 한는 배열이다. 즉, 값을 추가 할 때마다 적절한 셀에 넣어 배열의 값을 정렬된 상태로 유지한다. 정렬된 배열에 삽입할 때는 항상 실제 삽입 전에 검색을 먼저 수행해서 삽입할 오바른 위치를 정해야 된다. 전형적인 배열과 정렬된 배열의 성능 차이 중 하나. 전형적인 배열보다는 덜 효율적이지만, 정렬된 배열의 강력함은 검색 연산에서 드러난다. 2-2 정렬된 배열의 검색 정렬된 배열에서는 값이 배열에 들어있지 않을 때 검색을 더 빨리 멈출 ..

    1장 타입스크립트와 개발환경 만들기

    1-1 타입스크립란 무엇인가? 세 종류의 자바스크립트 ES5 ESNext 타입스크립트 타입스크립는 누가 만들었나? C# 언어를 창시한 아네르스 하일스베르가 핵심 개발자로 참여하고 있으며 구글의 Angular.js 팀이 앵귤러 버전 2를 만들면서 타입스크립트를 채택한 이후부터 널리 알려졌다. 자바스크립트에 타입 기능이 있으면 좋은 이유 A라는 개발자가 다음과 같은 코드를 만들었다고 가정 function makePerson(name, age) {} B라는 개발자가 이 코드를 이용, 오류가 발생했으면 원인이 무엇인지 찾기가 어렵다 makePerson(32, "Jack") But 처음부터 타입 기능을 이용해 구현했다면 이러한 문제는 발생하지 않는다 function makePerson(name: string, a..

    1장 자료 구조가 중요한 까닭

    코드 품질의 다양한 척도 코드 유지 보수성 즉, 가독성, 조직, 코드 모듈성 같은 측면을 포함. 코드 효율성. const printNumbersVersionOne = () => { let number = 2; while (number { let number = 2; while(number

    [update 22.04.03] 2022

    노션링크 구매예정 기초부터 완성까지, 프런트엔드 Do it! 인터랙티브 웹 페이지 만들기 오늘부터 개발자 오늘 밤 세계에서 이 사랑이 사라진다 해도 밝은 밤 불편한 편의점 미드나잇 라이브러리 Clean Code 클린 코드 구매 완료 (진행중) 코어 자바스크립트 모던 자바스크립트 완료 1. HTML 웹 프로그래밍 입문 - 윤인성 ☆2.5 - 처음 입문하는 사람한테는 무난한 편이지만 설명을 정확하게 하지 않고 대충대충 넘어가는 편이다 2. 나는 LINE 개발자입니다 ☆4.5 - 12명의 라인 개발자 분들의 생각과 다양한 경험을 들을 수 있었고 라인의 개발자가 되기까지의 여정 그리고 라인에서 동료들과 함께 개발자로서 성장하는 과정을 볼 수 있었다. 또, 글로벌 테크 기업인 라인의 개발문화를 느낄 수 있었다 강..