하나의 문제에는 여러가지 해결 방법이 있습니다. 어떻게? 이 중에서 무엇이 가장 좋은 방법인 지 판단할 수 있을까요?이러한 상황에서 좋은 코드를 판단하기 위해 빅오 표기법이 존재합니다.단순히 "좋다" "안좋다" 등의 표현은 수치적으로 비교하기 어렵습니다. 성능 좋은 코
객체란 정렬되어 있지 않은 데이터 구조이며, 키와 값(벨류)로 구성되어 있습니다.언제 objects를 사용할까요?정렬이 필요 없을때빠른 접근 및 입력 제거가 필요할 때 빠른 접근 입력 제거 -> O(1) 상수의 빅오를 따른다는 것이죠 (순서가 상관 없으니까요)검색의 경
알고리즘 문제를 풀기 위해서는 기본적으로 문제를 이해하고 정의하고 어떻게 해결할 지 정해야합니다. 그에 대한 내용을 담았습니다. 알고리즘이란 무엇일가요? 어떤 작업을 해결하기 위한 방식입니다. 유튜브 알고리즘의 선택을 받았다는 말을 들어 보셨나요. 거기서 말하는 유튜브
문제 해결 패턴 문제 해결 패턴 소개 문제를 풀 때 사용되는 일반적인 패턴에 대해서 알아보겠습니다. 이는 여러 문제에 적용시킬 수 있습니다. 하지만 모든 것을 커버해주지는 않습니다. Frequency counter Multiple pointers sliding wi
재귀가 무엇인지를 알고, 어떻게 사용하는 지 공부하기재귀 함수의 두가지 핵심 요소를 이해한다호출 스택(call stack)을 시각화하여 디버깅하고 이해합니다 helper method를 사용해서 재귀함수를 구성해봅니다. 재귀란 무엇인가요?재귀는 자기 자신을 호출하는 절차
"ABC"라는 문자열이 있는 데 이 문자열을 포함하는 다른 문자열을 찾고 싶다. 이런 경우 사용되는 알고리즘입니다. 자바스크립트에는 여러가지 내장 함수가 있습니다. 예를들면 indexOf 가있습니다. 검색알고리즘이 무엇인지 설명하고배열 선형 검색을 사용해보겠습니다. 이
정렬 알고리즘 정렬 알고리즘이 무엇인가? 간단히 말하면 배열을 원하는 방식으로 재배열하는 알고리즘 입니다. 예를 들면 배열을 입력받아 오름차순 혹은 내림차순으로 정렬하는 것을 말할 수 있습니다. 왜 배워야할까요? 정렬이 프로그래밍에서 정말 흔하게 쓰이기 때문입니다.
선택정렬이란 무엇일까요?기본적으로는 버블정렬과 비슷합니다. 대신에 최솟값을 찾아서 맨 앞에 놓는 방식의 정렬 입니다. index 0과 1을 비교합니다. 둘 중 작은 값 -> 최솟값최솟값과 index2와 비교합니다 -> 새로운 최솟값 (index 0~2) ... inde
버블정렬 및 선택 정렬과 비슷한 점이 많습니다. 하지만 차이점도 당연히 갖고 있죠정렬 원리는 배열에서 비교하면서 바로 정렬된 배열을 구성하는 방식입니다. 글로는 헷갈리기 때문에 그림으로 보겠습니다.처음에 8과 7을 비교해서 7,8 순서를 만들고 다음에 5와 비교해서 5
빠르게 3개의 알고리즘을 다루겠습니다. 이 3개의 알고리즘은 기본 정렬 알고리즘이라고 부릅니다.또는 2차 정렬 알고리즘이라고도 합니다 이유는 빅오가 O(N^2)이기 때문입니다. 거의 정렬된 배열에서는 버블과 선택 알고리즘이 더 좋은 효율을 가집니다. 대신 새로운 데이
겁나 빠른 정렬 소개 합병 알고리즘은 중급 알고리즘이라고 할 수 있습니다. 기초 알고리즘(선택 삽입 버블) 보다는 빠르지만 코드가 직관적이지는 않습니다. 코드를 작성해야한다는 부담감보다는 알고리즘의 동작 원리를 이해하는 것으로 목표합시다. (추후에는 코드로...짜보는
합병 정렬과 같은 가정으로 동작합니다. 배열을 최소단위로 분할합니다.피봇(pivot)포인트라고 부르는 단일 요소를 선택 및 수행합니다. 피봇 포인트를 다른 요소들과 비교하면서 위치를 고정 시킵니다. 자신보다 작은수는 왼쪽 큰수는 오른쪽 양쪽다 정렬은 되있지 않습니다.
버블, 선택, 삽입 알고리즘과 합병 퀵 알고리즘 지금까지 확인해본 정렬 알고리즘은 "비교"를 기본으로 하는 알고리즘입니다. 그래서 비교정렬이라고도 부릅니다.비교정렬을 기본적으로 한번에 비교할 수 있는 숫자의 개수가 정해져있기 때문에 수학적으로 시간복잡도의 한계가 있다고
자료 구조(data structure)란 값들의 모음입니다. 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다. 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다.
단일 연결 리스트 소개 단방향 연결 리스트가 무엇인가? 내장 어레이 구조와의 비교 많은 메소드와 기능을 추가해보겠습니다. 단방향 연결 리스트가 무엇인가요? 데이터를 저장하는 자료구조의 한 예입니다. 각각의 엘리먼트를 "노드"라고 부릅니다. 각 노드에는 문자열이나 숫
데이터 구조입니다. 후입선출 (LIFO) 원칙을 따르는 데이터들의 모읍이죠 가장 마지막에 추가된 요소는 가장 먼저 제거됩니다. 쌓여있는 책을 생각해봅시다. 그리고 그 책을 정리하려면 어떻게 해야할까요? 맨 위에 있는 책부터 내려놓겠죠? 물론 shift, unshift
선입선출 (FIFO)을 기반으로하는 데이터 구조입니다. 일반적으로 식당에 줄 서 있는 사람들을 생각해보시죠. 먼저 줄 서 있던 사람이 먼저 나가게 됩니다. 두 가지 방식이 있기는 합니다. push와 shift 조합과 unshift와 pop의 조합입니다. 하지만 성능을
트리란 고전적인 데이터 구조를 말합니다. 연결 리스트처럼 노드로 이루어졌습니다. 노드들 사이에서 부모 자식 관계를 가지며, 한개의 부모 밑에는 여러가지의 자식 노드를 가질 수 있습니다. 리스트는 하나의 라인으로 구성되어있습니다. 즉 하나의 경로 밖에 없습니다. 하지만