본문 바로가기

전체 글

(65)
[Javascript] 최대 매출 최대 매출 현수의 아빠는 제과점을 운영합니다. 현수 아빠는 현수에게 N일 동안의 매출기록을 주고 연속 된 K일 동안의 최대 매출액이 얼마인지 구하라고 했습니다. 만약 N=10이고 10일 간의 매출기록이 아래와 같습니다. 이때 K=3이면 12 15 11 20 25 10 20 19 13 15 연속된 3일간의 최대 매출액은 11+20+25=56만원입니다. 여러분이 현수를 도와주세요. 입력설명 첫 줄에 N(5
[Javascript] 연속 부분수열 1 연속 부분수열 1 N개의 수로 이루어진 수열이 주어집니다. 이 수열에서 연속부분수열의 합이 특정숫자 M이 되는 경우가 몇 번 있는지 구하는 프로그램을 작성하세요. 만약 N=8, M=6이고 수열이 다음과 같다면 1 2 1 3 1 1 1 2 합이 6이 되는 연속부분수열은 {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1}로 총 3가지입니다. 입력설명 첫째 줄에 N(1≤N≤100,000), M(1≤M≤100,000,000)이 주어진다. 수열의 원소값은 1,000을 넘지 않는 자연수이다. 출력설명 첫째 줄에 경우의 수를 출력한다. 입력예제1 8 6 1 2 1 3 1 1 1 2 출력예제1 3 풀이 과정 투포인터 알고리즘으로 주어진 수열을 lt와 rt라는 투 포인터를 둘 다 인덱스 0으로 잡아 놓는..
[모던자바스크립트 Deep Dive] 23. 실행 컨텍스트 1. 소스코드의 타입 ECMAScript 사양은 소스코드를 4가지 타입으로 구분하고 이 4가지 타입의 소스코드는 실행 컨텍스트를 생성한다. 소스코드의 타입 설명 전역 코드(global code) 전역에 존재하는 소스코드. 전역에 정의된 함수, 클래스 등의 내부 코드는 포함되지 않음 함수 코드(functional code) 함수 내부에 존재하는 소스코드. 함수 내부에 중첩된 함수, 클래스 등의 내부 코드는 포함되지 않음 eval 코드(eval code) 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드 모듈 코드(module code) 모듈 내부에 존재하는 소스코드. 모듈 내부의 함수, 클래스 등의 내부 코드는 포함되지 않음 소스코드를 4가지 타입으로 구분하는 이유 : 소스코드의 타입에..
[모던자바스크립트 Deep Dive] 22. this 1. this 키워드 객체 : 상태를 나타내는 프로퍼티와 동작을 나타내는 메서드를 하나의 논리적인 단위로 묶은 복합적인 자료구조 메서드는 자신이 속한 객체의 상태인 프로퍼티를 참조하고 변경할 수 있어야 한다. => 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 한다. 객체 리터럴 방식으로 생성한 객체의 경우 자신이 속한 객체를 가리키는 식별자를 재귀적으로 참조할 수 있다. const circle = { // 프로퍼티: 객체 고유의 상태 데이터 radius: 5, // 메서드: 상태 데이터를 참조하고 조작하는 동작 getDiameter() { // 이 메서드가 자신이 속한 객체의 프로퍼티나 다른 메서드를 참조하려면 // 자신이 속한 객체인 circle을 참조할 수 있어야 한다. return 2 *..
[모던자바스크립트 Deep Dive] 21. 빌트인 객체 1. 자바스크립트 객체의 분류 표준 빌트인 객체 - ECMAScript 사양에 정의된 객체 호스트 객체 - ECMAScript 사양에 정의되지는 않았지만 자바스크립트 실행 환경에서 추가로 제공하는 객체 사용자 정의 객체 - 기본 제공되는 객체가 아닌 사용자가 직접 정의한 객체 2. 표준 빌트인 객체 자바스크립트는 Obejct, String, Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Set, WeakMap/WeakSet, Function, Promise, Reflect, Proxy, JSON, Error 등 40여 개의 표준 빌트인 객체를 제공 Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 ..
[모던자바스크립트 Deep Dive] 20. strict mode 1. strict mode란? 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 더 엄격한 평가를 하는 ES5부터 추가된 모드이다. ESLint 같은 린트 도구를 사용해도 strict mode와 유사한 효과를 얻을 수 있다. 린트 도구가 사용자 정의 형태로 커스터마이징이 가능하기 때문에 더 추천하는 방식! 2. strict mode의 적용 strict mode를 적용하기 위해 전역의 선두 또는 함수 몸체의 선두에 'use strict';를 추가 전역에 선두에 추가하면 스크립트 전체에 적용 함수 몸체 선두에 추가하면 해당 함수와 중첩 함수에 적용 코드 선두에 'use strict'를 위치하지 않으면 동작하..
[모던자바스크립트 Deep Dive] 19. 프로토타입(3) 9. 프로토타입의 교체 프로토타입은 임의의 다른 객체로 변경 가능 부모 객체인 프로토타입을 동적으로 변경할 수 있다 위 두 특징으로 인해 객체 간의 상속 관계를 동적으로 변경할 수 있다. 1. 생성자 함수에 의한 프로토타입의 교체 const Person = (function () { function Person(name) { this.name = name; } // ① 생성자 함수의 prototype 프로퍼티를 통해 프로토타입을 교체 Person.prototype = { sayHello() { console.log(`Hi! My name is ${this.name}`); } }; return Person; }()); const me = new Person('Lee'); ①에서 Person.prototyp..
[모던자바스크립트 Deep Dive] 19. 프로토타입(2) 4. 리터럴 표기법에 의해 생성된 객체의 생성자 함수와 프로토타입 명시적으로 new 연산자와 함께 생성자 함수를 호출하여 인스턴스를 생성하지 않는 객체 생성 방식도 있다. // 객체 리터럴 const obj = {}; // 함수 리터럴 const add = function (a, b) { return a + b; }; // 배열 리터럴 const arr = [1, 2, 3]; // 정규표현식 리터럴 const regexp = /is/ig; 리터럴 표기법에 의해 생성된 객체도 프로토타입이 존재 리터럴 표기법에 의해 생성된 객체의 경우 constructor 프로퍼티가 가리키는 생성자 함수가 반드시 객체를 생성한 생성자 함수라고 단정할 수는 없다.(ECMAScript 사양 참고) Object 생성자 함수 호출..