100이하 : 완전탐색, 백트래킹
10,000 이하
입력값이 작은 문제
지도가 주어지고 채워진 영역을 찾아야하는 경우
그래프 그림
특정 조건을 만족하는 최대/최소값
실시간으로 정렬이 이루어져야하는 경우
DP 문제
문자열이 주어지는 경우
현재 상황에서 최적의 선택
이터러블(iterable) : 이터레이터를 리턴하는 [Symbol.iterator]()
를 가진 값
이터레이터(iterator) : { value, done}
을 리턴하는 next()
를 가진 값
이터러블/이터레이터 프로토콜 : 이터러블을 for...of
, 전개 연산자 등과 함께 동작하도록 한 규약
ES6에서 배열 등을 순회할 때 사용하는, for...of
가 추가
이를 통해 내부 순회를 돌 수 있는 속성이 이터러블
for...i++
은 배열만 순회 가능하지만,
for...of
는 배열, 객체, 그리고 ES6에서 추가된 Map, Set 객체도 순회가 가능하다.
/// array const arr = [1, 2, 3]; for (const a of arr) log(a); //1, 2, 3 for (let i = 0; i < arr.length; i++) log(arr[i]); // 1, 2, 3 // set const set = new Set([1, 2, 3]); for (const a of set) log(a); // 1, 2, 3 for (let i = 0; i < set.length; i++) log(set[i]); // undefined //map const map = new Map([ ["a", 1], ["b", 2], ["c", 3], ]); for (const a of map) log(a); // ["a", 1], ["b", 2], ["c", 3], for (let i = 0; i < map.length; i++) log(map[i]); // undefined
사용자 정의 이터러블 예시
const iterable = { [Symbol.iterator]() { let i = 3; return { next() { return 1 == 0 ? { done: true } : { value: i--, done: false }; }, //well-formed 조건 [Symbol.iterator]() { return this; }, }; }, }; let iterator = iterable[Symbol.iterator]();
- well-formed iterable/iterator
자기자신을 반환하는 Symbol.iterator 메서드를 가지고 있을 때.
자기자신의 상태를 기억.
반복 진행상황 기억 가능.
이터레이터이자 이터러블을 생성하는 함수
*
을 붙임 function* gen() { yield 1; yield 2; yield 3; return 100; }
이터레이터, 이터러블, 제너레이터 처음 들어본 개념이다.
ES6에서 for...of
문법이 생긴건 알고 있었지만, 기존과 차이를 몰라 익숙했던 for...i++
문법을 애용했는데 앞으로 새로운 문법을 사용하는 연습을 해야겠다.
객체 키-밸류 값 받아올 때도 Object.keys()
쓰곤 했는데 이거 쓰면 훨씬 나아지겠지.
이번 기회에 아직 낯설기만 한 Map, Set 오브젝트를 스터디 주제로 다뤄볼까 생각 중이다.