JAVASCRIPT/문법 16

[자료구조/알고리즘] 슬라이딩 윈도우 알고리즘

1️⃣ 슬라이딩 윈도우란? 고정 사이즈의 윈도우가 이동하면서 윈도우 내에 있는 데이터를 이용해 문제를 풀이하는 알고리즘 배열이나 리스트의 요소의 일정 범위 값을 비교할 때 사용하면 매우 유용 배열과 그 부분 배열을 어떤 조건하에서 계산하는 경우에 주로 사용 예) 구간 합 구하기, 부분 문자열 구하기 등 2️⃣ 구간마다 일일이 합을 구할 경우 vs 슬라이딩 윈도우 알고리즘을 활용할 경우 1. 구간마다 일일이 합을 구할 경우 앞에서 구했던 값이 있음에도 불구하고 다음 번에 또 구하고.. 또 구하고.. 시간복잡도가 늘어날 수밖에 없다 -> 효율성이 떨어짐 2. 슬라이딩 윈도우 알고리즘을 활용할 경우 최초 윈도우에 대해서만 값을 구하고 한 칸씩 윈도우를 밀 때에는 이전 구간 합을 활용함 -> 효율성 좋음 윈도우..

JAVASCRIPT/문법 2024.03.20

[자료구조/알고리즘] 탐욕법 (greedy) 알고리즘

1️⃣ 그리디 알고리즘이란? 선택의 순간마다 당장 눈 앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법 그리디 알고리즘을 해결하기 위해서는 최적이라 생각되는 해답을 찾고 이를 통해 최종 문제의 해답에 도달하는 방식으로 접근해야 함 locally optimal solution -> globally optimal solution 그러나, 이런 방법은 항상 최적의 결과를 보장하지 않음 (특정한 상황에서만 보장) 2️⃣ 그리디 알고리즘을 사용할 수 있는 두 가지 조건 탐욕적 선택 속성(Greedy Choice Property) : 앞의 선택이 이후의 선택에 영향을 주지 않는다 최적 부분 구조(Optimal Substructure) : 문제에 대한 최종 해결 방법은 부분 문제에 대한 최적 해결 방법..

JAVASCRIPT/문법 2024.03.18

[자료구조/알고리즘] 동적계획법(DP)

프로그래머스에서 피보나치 수열 코딩테스트 문제를 풀다가... 신나게 재귀함수로 풀어야지~~ 하고 풀었지만 시간초과, 런타임 에러... 프로그래머스에서 제공하는 코딩테스트 연습 힌트 모음집을 보니까 딱 나의 케이스에 대한 내용이 있었다🤣 일반적인 재귀를 단순히 사용 시 동일한 작은 문제들이 여러 번 반복 되어 비효율적인 계산이 되어 시간초과가 난 것이었다,, return f(n) = f(n-1) + f(n-2) 이렇게 하게 되면 f(n-1)에서 한 번 구한 값을 f(n-2)에서 또 같은 값을 구하는 과정을 반복하게 되기 때문에 100번째 피보나치 수를 구하기 위해 호출되는 함수의 횟수는 기하급수적으로 증가하는 것이다. 그러나 한 번 구한 작은 문제의 결과 값을 저장해두고 재사용하게 되면 앞에서 계산된 값을..

JAVASCRIPT/문법 2024.03.10

[자료구조 / 알고리즘] 스택, 큐

1. 추상자료형이란? 어떤 데이터의 구체적인 구현 방식은 생략한 채, 데이터의 추상적인 형태와 그 데이터를 다루는 방법만을 정해놓은 것 ADT(Abstract Data Type) 2. 스택(Stack) 데이터를 집어넣을 수 있는 선형(linear) 자료 나중에 집어넣은 데이터가 먼저 나옴. LIFO(Last In First Out) 데이터를 집어넣는 push / 데이터를 추출하는 pop / 맨 나중에 집어넣은 데이터를 확인하는 peek class Stack { constructor() { this._arr = []; } push(item) { this._arr.push(item); } pop() { return this._arr.pop(); } peek() { return this._arr[this._a..

JAVASCRIPT/문법 2024.03.04

[자료구조 / 알고리즘] 해시

1. 해시 테이블이란? 자료구조 종류 중 하나로 key와 value를 가짐 직업 : 개발자 나이 : 28 2. 해시란? 해시함수라고 하는 함수를 이용해서 입력값을 고정길이 문자열로 치환하는 것 배열은 key값에 숫자만 받을 수 있지만 해시는 문자열까지 받을 수 있음 문자열로 받은 key 값을 해싱이라는 과정을 통해서 일정 길이의 주소값으로 바꿔서 저장해두고 있기 때문 --> 해시 함수의 역할 3. 자바스크립트에서는 좀 더 쉽게 해시 테이블을 사용할 수 있게끔 해주는 자료구조가 있다. --> Map 4. Map이란? key가 있는 데이터를 저장하는 데 쓰이는 자료구조 Map의 key값은 문자열 가능 --> 해시에 이용 가능 5. Map 메서드 new Map() --> Map의 객체를 만들 때 사용 map...

JAVASCRIPT/문법 2024.03.03

[JAVASCRIPT] map과 filter의 차이

1. map() - callback 함수를 각각의 요소에 대해 한 번씩 순서대로 불러 그 함수의 반환값으로 새로운 배열을 생성 arr.map(callback(currentValue[, index[, array]])[, thisArg]) - callback: 새로운 배열 요소를 생성하는 함수. 다음 세 가지 인수를 가짐 currentValue : 처리할 현재 요소 index (Optional) : 처리할 현재 요소의 인덱스 array (Optional) : map()를 호출한 배열 thisArg (Optional) : callback을 실행할 때 this로 사용할 값 --> map의 콜백함수는 산술된 인자를 받아 배열을 만듦 --> 논리 연산일 때는, 산술 결과인 불리언 값을 리턴해 배열 만듦 2. 주어진..

JAVASCRIPT/문법 2023.03.07

[JAVASCRIPT] 배열 정렬, 배열 내 객체 정렬

- 배열 내 객체들을 정렬하는 방법 1. for문을 직접 돌리기 2. Array.sort() 기능 사용 let products = [ { id: 0, price: 70000, title: "꽃무늬 원피스" }, { id: 1, price: 50000, title: "데님 셔츠" }, { id: 2, price: 60000, title: "트러커 재킷" }, ]; products.sort(function(a,b) { return -1, 0, 1 ... }) - return이 1 이상 : b가 먼저, 그 다음 a - return이 -1 이상 : a가 먼저, 그 다음 b - return이 0 : 그대로 놔둠 1. 숫자: price 기준 오름차순 정렬 products.sort(function (a, b) { r..

JAVASCRIPT/문법 2023.03.06

[JAVASCRIPT] reduce

- reduce()의 callback 함수는 누적 값과 현재 처리 중인 배열의 element(=currValue)를 파라미터로 받음 - 누적 값과 currValue의 합을 리턴하면 리턴된 값이 callback 함수의 누적 값(sum)으로 전달됨 - reduce() 초깃값을 지정하지 않으면 배열의 첫 번째 값을 처리할 때 sum 값으로 배열의 첫 번째 값(arr[0])이 설정됨 - 빈 배열이 전달 될 경우 arr[0]은 null값이기 때문에 에러 발생 ---> 초깃값을 지정하여 에러 발생 피하는 게 좋음 function record(before, after) { let result = before.reduce(function add(sum, currValue) { return sum + currValue;..

JAVASCRIPT/문법 2023.03.06