분류 전체보기

알고리즘/문제풀이

[JavaScript][node.js] 백준 1406 에디터

문제 https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 풀이과정 💡 아이디어 실제 cursor 변수를 다룬다고 생각하지 말고, cursor의 왼쪽과 오른쪽에 있어야 할 문자열을 stack으로 관리한다. 명령어 L : 커서를 왼쪽으로 한 칸 옮김 (커서가 문장의 맨 앞이면 무시됨) if (c === 'L') { if (cursor_left.length) { const top = cursor_left.pop(); cursor_right.push(top..

알고리즘/자료구조

[JS] 자바스크립트 스택 구현하기

1. 배열로 스택 구현하기 그냥 JS 배열 메서드를 사용하면 스택을 활용할 수 있다. 2. 객체로 스택 구현하기 class Stack { #storage; constructor() { this.#storage = {}; this.length = 0; } push(item) { this.#storage[this.length++] = item; } pop() { if (!this.length) return; const item = this.#storage[--this.length]; delete this.#storage[this.length - 1]; return item; } } 3. 링크드리스트로 스택 구현하기 push(item) class Node { constructor(data) { this.dat..

TIL/TypeScript

[240131] 제네릭, 유틸리티 타입(제네릭 타입)

✅ 제네릭 ✅ extends 키워드 활용하기 ✅ 인덱스 시그니처 활용하기 ✅ 의존성에 대한 이해 ✅ TS Doc을 활용해보자. ✅ any를 구체화시키자. 혹은 unknown을 활용하자. ✅ declare 키워드의 활용 ✅ 타입 커버리지를 추적하자. 이펙타 스터디를 하면서 적은 추가로 공부해야 할 내용들을 지난 프로젝트에 하나씩 적용해보자 ! ~~ 제네릭이란? 타입을 마치 함수의 파라미터처럼 사용하는 것 코드의 선언 시점이 아니라 생성 시점(런타임)에 타입을 명시 이런 코드를 function identity(arg: any): any { return arg; } 이렇게 써볼 수 있다! function identity(arg: T): T { return arg; } any와 다른 점은, 매개변수로 받은 타입..

TIL/JavaScript

[240130] this

this란? this는 자신이 속한 객체, 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수이다. this가 왜 필요할까? 메서드는 자신이 속한 객체의 프로퍼티를 참조하고 변경할 수 있어야 한다. ➡️ 이를 위해 메서드는 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 한다. 생성자 함수 내부에서는 프로퍼티 또는 메서드를 추가하기 위해 자신이 생성할 인스턴스를 참조할 수 있어야 한다. 하지만 생성자 함수를 정의하는 시점은 인스턴스를 생성하기 이전이므로 생성자 함수가 생성할 인스턴스를 가리키는 식별자를 알 수 없다. ➡️ 이를 위해 자신이 생성할 인스턴스를 가리키는 특수한 식별자가 필요하다. this는 언제 결정되는가 this의 값은 런타임에 결정된다. 동일한 함수라도 다른 객체에서 호출했다면..

TIL/JavaScript

[240130] 렉시컬 환경, 렉시컬 스코프

렉시컬 환경(렉시컬 환경 객체) 이란? 코드블록({...}), function, script를 실행하기 앞서 생성되는 특별한 객체 실행할 스코프 범위 안에 있는 변수와 함수를 프로퍼티로 저장하는 객체 렉시컬 환경의 구성요소 1. 환경 레코드(Environment Record) 모든 지역 변수를 프로퍼티로 저장하고 있는 객체 this 값과 같은 기타 정보도 여기에 저장 💡 변수는 특수 내부 객체인 환경 레코드의 프로퍼티일 뿐. 변수를 가져오거나 변경하는 것은 환경 레코드의 프로퍼티를 가져오거나 변경함을 의미 1.1 객체 환경 레코드 (Object Environment Record) 바인딩 하는 것들 전역 객체 -> BindingObject 객체 with문과 같이 식별자를 어떤 특정 객체의 속성으로 취급할 ..

TIL/JavaScript

[240130] 스코프, 스코프 체인, 프로토타입, 프로토타입 체인

스코프란? 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다. 스코프는 식별자가 유효한 범위이다. 스코프는 식별자 이름의 충돌을 방지한다. 스코프의 구분 Global Scope (전역 스코프) 코드의 가장 바깥 영역 코드 어디서든지 참조가능 Local Scope (Function-level Scope, 지역 스코프) 함수 몸체 내부 함수 자신의 지역 스코프와 하위 스코프에서만 참조가능 스코프 체인 스코프 체인은 함수의 중첩에 의해 스코프가 계층적으로 연결된 것이다. 변수를 참조할 때 자바스크립트 엔진은 변수를 참조하는 코드의 스코프에서 시작하여 스코프 체인을 통해 상위 스코프 방향으로 이동하며 선언된 변수를..

TIL/JavaScript

[240130] 자바스크립트의 객체 생성 방법(객체 리터럴 vs new Object() vs 생성자 함수 vs 클래스)

객체 리터럴, new Object() - 객체 하나 만들 때 // 객체 생성 방법 1: 리터럴 const Person1 = { name: 'Ham', age: 24, }; console.log(Person1.__proto__ === Object.prototype); // true console.log(Person1.__proto__.constructor === Object); // true // 객체 생성 방법 2: Object 생성자 함수 const Person2 = new Object(); Person2.name = 'Ham'; Person2.age = 24; console.log(Person2.__proto__ === Object.prototype); // true console.log(Person..

TIL/JavaScript

[240129] 프로토타입, [[Prototype]] vs __proto__ vs prototype 프로퍼티

[[Prototype]] 과 프로토타입 객체 모든 JS 객체는 [[Prototype]] 이라는 숨김 프로퍼티를 갖는다! [[Prototype]] 이 다른 객체를 참조하고 있을 때 그 참조하는 대상을 프로토타입 객체 라고 한다. __proto__ [[Prototype]] 은 직접 접근이 불가능하다. 프로토타입 체인의 단방향성 때문. [[Prototype]] 의 getter 이자 setter인 __proto__ 로 접근 가능 최근에는 Object.getPrototypeOf / Object.setPrototypeof 를 사용 함수의 prototype 프로퍼티 // 생성자 함수 const Person = function (name, age) { this.name = name; this.age = age; }; ..

햄oOoOo
'분류 전체보기' 카테고리의 글 목록 (6 Page)