분류 전체보기56 알고리즘 - 다이나믹 프로그래밍(Dynamic Programming) 다이나믹 프로그래밍?다이나믹 프로그래밍이란 큰 문제를 작은 문제로 나누어 해결하고 작은 문제의 결과를 재사용하면서 중복 계산을 피하며 작업을 줄여 효율적으로 문제를 해결하는 방법이다. 이때, 작은 문제를 하위 문제라고 한다. 하위 문제는 동일한 문제를 작게 만들어 해결함으로써 어떤 문제를 풀 때 더 작은 문제이다. 재귀 호출은 프로그램을 단순하게 만들 수 있지만, 불필요한 재귀 호출이 일어나면 재귀 코드의 속도를 느리게 만들 수 있다. 그래서 불필요한 재귀 호출이 일어나지 않도록 해야 한다. 하위 문제가 중첩되는 이유는 같은 함수를 여러 번 중복해서 호출하기 때문이다. 이러한 불필요한 호출을 줄이기 위해서 필요한 함수 호출을 한 번만 하고 그 결과를 변수에 저장한다. 피보나치 수열다이나믹 프로그래밍으로 .. 2024. 7. 15. 알고리즘 - 재귀(Recursive), 꼬리 재귀(Tail recursive) 재귀란?재귀는 자기 자신을 호출하는 함수이다. 알고리즘이 임의의 단계만큼 깊이 들어가야 한다면 재귀가 좋은 방법일 수 있다. 재귀 함수 분석 방법1. *베이스 케이스를 찾는다2. 베이스 케이스에서 함수가 어떻게 동작하는지 살핀다.3. 베이스 케이스 바로 이전의 조건을 찾는다.4. 베이스 케이스 바로 이전의 조건에서 함수가 어떻게 동작하는지 확인한다.5. 이전의 조건으로 거슬러 올라가면서 코드가 어떻게 동작하는지 확인한다.이렇게 재귀 함수는 베이스 케이스부터 거꾸로 올라가면서 추론하는 방법이 유용하다. *BaseCase베이스 케이스는 함수가 반복되지 않는 경우이다. 즉, 함수가 더 이상 자기 자신을 호출하지 않아서 종료되는 조건이다. 모든 재귀 함수는 무한으로 호출하지 않도록 베이스 케이스가 반드시 하나 .. 2024. 7. 15. BigO 표기법으로 최적화하기 BigO 표기법?- 시간 복잡도를 쉽게 소통하기 위해서 자료구조와 알고리즘의 효율성을 일관되게 설명하는 수학적 개념을 형식화한 표현- 일관되게 어떤 알고리즘이든 분석할 수 있다.- 알고리즘의 성능이나 복잡성을 분석할 때 사용된다.- 시간 복잡도 혹은 공간 복잡도를 나타낼 때 사용된다.- 데이터가 늘어날 때 알고리즘의 성능이 어떻게 변화하는지 추세를 나타낸다.- 대문자 O에 괄호 안에는 수식을 넣어 표기한다. Ex.) O(N), O(1), O(logN) BigO를 사용하는 이유빅오 표기법은 알고리즘의 효율성을 평가하는 데 중요한 도구이다. 빅오 표기법을 사용하여 알고리즘의 수행 시간을 예측하고 비교할 수 있다. 빅오 표기법을 이용하여 실행 시간이 더 적은 알고리즘을 선택하여 처리 시간을 단축할 수 있다. .. 2024. 7. 12. 자료구조 - 배열 (Array) 배열은 같은 타입의 순서가 있는 자료구조이다.- 배열은 동일한 타입의 원소들을 메모리상에 연속적으로 저장한다.- 각 원소들은 동일한 데이터 타입을 가지고 있다.- 배열은 크기를 가지고 있어서 배열에 데이터 원소가 얼마나 들어있는지 알 수 있다.- 특정 데이터가 배열의 어디에 있는지 알려주는 숫자인 인덱스가 있다.- 인덱스로 각 요소에 빠르게 접근할 수 있다. 컴퓨터는 배열을 할당할 때 어떤 메모리 주소에서 시작하는지 기록해 둔다. 그래서 시작 메모리 주소에서 얼마나 떨어져있는지로 배열의 값에 바로 바로 접근할 수 있다. 선형 검색 (linear search)메모리 주소에는 한 번에 접근할 수 있지만, 각 메모리 주소에 저장된 값은 쉽게 알 수 없다. 그래서 특정 값이 배열 안에 있는지 확인하려면 배열의 .. 2024. 7. 12. 자바스크립의 값과 참조값의 얕은 복사와 깊은 복사 undo & redo 구현중에 인스턴스 상태를 저장하는 코드를 작성해야 해서 얕은 복사와 깊은 복사를 좀 더 심도 있게 공부하고자 오랜만에 블로그를 켰다 ,, 먼저, 자바스크립트의 값은 원시값과 참조값 두 가지 데이터 타입으로 나뉜다. 원시값 Number String Null Undefined 참조값 Object Symbol 원시값은 기본 자료형(단순 데이터)을 의미한다. 변수에 원시값을 저장하면 변수의 메모리 공간에 실제 데이터 값이 저장되고, 할당된 변수를 조작하려고 하면 저장된 실제 값이 조작된다. let a = 'b'; a = 'c' console.log(a) //'c' 원시값을 복사해서 다른 값을 입력할 경우, 원시값은 또 다른 독립적인 메모리 공간에 할당하기 때문에 기존 원시값을 저장한 변수에.. 2023. 6. 10. Template literals 구현 (2) - Web Component Web Component : 웹 컴포넌트는 JavaScript, CSS, HTML들을 컴포넌트화하기 위해 필요한 4개의 표준을 묶어서 부르는 이름이다. 웹 컴포넌트가 등장한 배경이 흥미로운데, 수 많은 자바스크립트 프레임워크들이 쏟아져 나왔을 때 구글은 프레임워크의 단점들을 보완하기 위해서는 브라우저 기능과 적절히 섞어 사용해야 가볍고 성능 좋은 APP을 만들 수 있다며 권유했다. 아무런 의심 없이 프레임워크를 사용하고 있던 나에게 적잖은 깨우침을 주었다랄까.. (!) 구글과 페이스북을 포함한 프레임워크 제작사들은 React vs Web Component가 아닌 Web Component With React, Angular, Ember의 뉘앙스로 글을 쓰고 있다고 한다. 프레임워크 Component와 비교.. 2023. 2. 14. 이전 1 2 3 4 5 6 ··· 10 다음