🙄이터러블? 이터레이션 프로토콜? ES6에서 도입된 이터레이션 프로토콜은 순회가능한 데이터 컬렉션을 만들기 위해 약속한 규칙입니다. ES6 이전에는 통일된 규약 없이 다양한 방법으로 순회할 수 있었지만 ES6에서는 이터레이션 프로토콜을 준수하는 이터러블로 통일하여 for...of 문, 스프레드 문법, 배열디스트럭처링 할당의 대상으로 사용할 수 있게 일원화 했습니다. 이 이터레이션 프로토콜에는 이터러블 프로토콜과 이터레이터 프로토콜이 있습니다. 이터레이션프로토콜 이터러블프로토콜 이터레이터프로토콜 for...of문으로 순회 가능 스프레드 문법 배열 디스트럭처링 할당 대상으로 사용가능 이터레이터는 이터러블의 요 소를 탐색하기 위한 포인터 역할을 합니다. 🙄for of 문? for in 문? for of 문과 ..
🙄정규표현식이 뭔가요? 정규표현식(regular expression)은 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어(formal language)입니다. 정규표현식은 문자열을 대상으로 패턴 매칭 기능을 제공합니다. 정규표현식을 사용하면 반복문과 조건문 없이 패턴을 정의하고 테스트할 수 있습니다. 하지만 가독성이 좋지 않다는 문제도 있어요 🙄정규표현식의 생성 /regexp/i / regexp / i 시작기호 패턴 종료기호 플래그 시작기호 , 패턴 , 종료기호 ,플래그로 이루어집니다. 🙄RegExp 플래그 플래그는 정규 표현식의 검색 방식을 설정하기 위해서 사용합니다. 플래그 의미 설명 i Ignore Case 대소문자를 구별하지 않고 패턴을 검색한다. g Global 대상 문자열 ..
🙄배열이란? 배열은 여러개의 값을 순차적으로 나열한 자료구조입니다. 배열이 가지고 있는 값을 요소(element)라고 부르며 자바스크립트의 모든 값은 배열의 요소가 될 수 있습니다. 배열은 자신의 위치를 나타내는 정수 index를 가지며 보통 index는 0부터 시작합니다. 🙄배열은 객체지만 일반 객체와 구별된다. 구분 객체 배열 구조 프로퍼티 키와 프로퍼티 값 인덱스와 요소 값의 참조 프로퍼티 키 인덱스 값의 순서 X O length property X O 🙄자바스크립트의 배열은 배열이 아니다? 자료구조에서 말하는 배열은 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료구조이며 배열의 요소는 하나의 데이터 타입으로 통일되어 있고 서로 연속적으로 인접해있습니다. 이러한 배열을 밀집 배열이라고 ..
⚡문제정보 두 값의 조합 중 작은 값을 모아서 합계를 내는데 최대한 높은 값을 만들어야 하는 문제입니다. easy 문제니까 감이 오시겠지만 이거 오름차순 정렬해놓으면 끝임 🔍나의 풀이 var arrayPairSum = function(nums) { let answer = 0 nums.sort((a,b) => a - b) for(i=0 ; i< nums.length ; i += 2) { answer += nums[i] } return answer }; 정렬해주고 i를 2씩 증가시켜주면서 answer에 nums[i]를 누적해줍니다. 끝
⚡문제정보 그림이 있었으면 아주 쉽게 이해가 될텐데 x축 y축 소리 때문에 오히려 한번에 이해가 안되었던 문제 그러니까 저 배열안에 담긴 두 숫자는 x 축의 선분이라고 생각하면 되고 화살을 이런식으로 쏠 수 있는데 최소한으로 화살을 쏴서 모든 풍선을 터치고 싶다.라는 내용입니다. 🔍접근방법 끝 선분을 기준으로 오름차순 정렬해준 다음 비교해주면 끝 🔍나의 풀이 var findMinArrowShots = function(points) { let answer = 1 points.sort((a,b) => { return a[1] - b[1] }) let pointer = points[0][1] for(i=1 ; i= points[i][0]) continue else { pointer = points[i][1] ..
⚡문제정보 sort를 잘 활용하면 풀 수 있을 문제같아 보이는데 sort가 제 마음대로 잘.. 동작을 안해서 조금 참고를 통해 풀었습니다. 🔍나의 풀이 var largestNumber = function(nums) { if(!nums.filter(ele => ele != 0).length) return '0' nums.sort( (a,b) => { let as = a.toString() let bs = b.toString() return parseInt(as + bs) > parseInt(bs + as) ? -1 : 1 }) return nums.join('') }; 만약 모든 요소가 0인 경우엔 '0'을 리턴해줍니다. 그렇지않으면 [0,0]같은 케이스에서 '00'이 리턴되기때문이에요 nums를 sort..
⚡문제정보 i < j < k 가 성립해야하는데 꼭 순서대로 성립하지 않아도 괜찮습니다. 즉 좀 띄엄띄엄있어도 i < j < k이기만 하면 true를 반환하는 조건입니다. 예컨대 아래 배열같은 경우 true를 반환해야할것입니다. [ 10 , 2 , 12 , 5 , 3 , 8 ] 🔍접근방법 그리디 알고리즘을 통해 O(n)으로 해결할 수 있을 것 같습니다. 예를 들어 가장 작은 값과 가장 작은 값보다 큰 값을 정해준뒤 nums[i]를 계속 업데이트해주면서 나아가는거죠! 🔍나의 풀이 var increasingTriplet = function(nums) { let Max1 = Infinity let Max2 = Infinity for(i=0 ; i< nums.length; i++) { if(Max1 < Max2 ..
🙄 함수의 구분 ES6 이전의 모든 함수는 일반함수로서 호출 할 수 있는 것은 물론 생성자 함수로서 호출할 수 있었습니다, 즉 모든 함수가 callable 하면서 constructor였습니다. 이런 경우 객체에 바인딩 된 함수를 생성자 함수로 호출할 수도 있고 콜백 함수도 생성자 함수로 만들수도 있는 등 함수의 사용 목적에 따른 구분이 없다보니 실수를 유발할 수 있고 성능에도 좋지 않았습니다. 따라서 ES6에서는 함수의 사용 목적에 따라 세가지 종류로 구분했습니다. ES6 함수의 구분 constructor prototype super arguments 일반 함수(normal) O O X O 메서드(method) X X O O 화살표 함수(Arrow) X X X X ** ES6사양에서 메서드는 메서드 축약..