본문 바로가기

분류 전체보기365

[큐] 공주 구하기 자바스크립트 알고리즘 문제풀이 강의를 듣고 정리한 내용입니다. 📋 문제 괴물에게 잡힌 이웃나라의 공주를 구하기 위해 N명의 왕자가 나섰다. 공주를 구할 단 한 명의 왕자를 고르기 위해 왕은 다음과 같은 방법으로 공주를 구하러 갈 왕자를 고르기로 했다. 왕은 왕자들을 1부터 N까지 순서를 매겼다. 그리고 1번 왕자부터 시계방향으로 돌아가며 동그랗게 앉게 한 후 1부터 번호를 외치게 했다. 한 왕자가 특정한 숫자 K를 외치면 그 왕자는 공주를 구하러 가는 데서 제외되고 원 밖으로 나온다. 그리고 다음 왕자부터 다시 1부터 시작해 번호를 외친다. 이렇게 해서 마지막에 남은 왕자가 공주를 구하러 갈 수 있다. 예를 들어 8명의 왕자가 있고 3을 외친 왕자가 제외된다고 하면 제외되는 순서는 3, 6, 1, 5, .. 2022. 1. 3.
[FP&ES6+] callback, Promise를 이용한 비동기 동시성 프로그래밍 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✅ callback을 이용한 비동기 동시성 프로그래밍 callback은 함수에 파라미터로 들어가는 함수이다. 코드를 순차적으로 실행하고 싶을 때 콜백 함수를 사용한다. 자바스크립트는 특성상 비동기적으로 처리되기 때문에 함수의 실행을 순차적으로 작성했다고 하더라도 이 함수들이 해당 순서대로 동작하는 것은 보장할 수 없다. 따라서 순서를 확실하게 보장하고 싶은 경우 먼저 실행할 함수에 다음 실행할 함수를 인자로 넣어 순차적으로 실행하게 하는 것이다. function add10(a, callback) { setTimeout(() => callback(a + 10), 100); } add10(5, (res) => { console... 2022. 1. 2.
[FP&ES6+] L.flatMap, flatMap 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✅ Array.prototype.flatMap과 flatten + map의 비교 Array.flatMap() 먼저 Array.map()을 사용해 각 요소에 대해 map 연산을 수행한 후 얻은 결과를 값을 펼쳐 새로운 배열로 만든다. arr.flatMap(callback(currentValue[, index[, array]])[, thisArg]) currentValue : 배열에서 처리되는 현재 엘리먼트 console.log([[1, 2], [3, 4], [5, 6, 7], 8].flatMap(a => a)); console.log([[1, 2], [3, 4], [5, 6, 7]].flatMap(a => a.map(a => .. 2021. 12. 28.
[FP&ES6+] L.flatten, flatten 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✅ L.flatten [[1, 2], 3, 4, [5, 6], [7, 8, 9]]와 같은 값이 들어왔을 때 결과값으로 [1, 2, 3, 4, 5, 6, 7, 8, 9] 와 같이 값을 펼친 결과를 리턴하는 함수이다. 다시 말해 위와 같은 값이 들어왔을 때 L.flatten을 사용하여 [...[1, 2], 3, 4, ...[5, 6], ...[7, 8, 9]] 처럼 동작하려 한다. 전개 연산자를 사용한 것과 같은 작업을 하기 위해서는 먼저 인자로 주어진 이터러블을 순회한다. 그러다 이터러블인 요소를 만나면 이들을 다 이터러블이 아닌 값이 될 때까지 값을 펼친다. const isIterable = (a) => a && a[Symb.. 2021. 12. 27.
[FP&ES6+] L.map, L.filter로 map, filter 만들기 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✅ L.map + take로 map 만들기 const map = curry((f, iter) => { let res = []; iter = iter[Symbol.iterator](); let cur; while (!(cur = iter.next()).done) { const a = cur.value; res.push(f(a)); } return res; }); L.map = curry(function* (f, iter) { iter = iter[Symbol.iterator](); let cur; while (!(cur = iter.next()).done) { const a = cur.value; yield f(a); } }).. 2021. 12. 27.
[FP&ES6+] 결과를 만드는 함수 - take 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✅ 결과를 만드는 함수 map과 filter는 이터러블 안쪽의 값을 꺼내서 기본적인 값을 유지한 채로 새로운 값을 만든다. 반대로 reduce와 take는 이터러블 안쪽의 값을 꺼내는 것은 동일하나 값을 유지시키는 것이 아닌 연산이나 특정 방식으로 값을 깨뜨려 그 결과가 합쳐진 새로운 값을 만들어낸다. 즉, 결과를 만들어 낸다. const reduce = curry((f, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } for (const a of iter) { acc = f(acc, a); } return acc; }.. 2021. 12. 27.
[FP&ES6+] 결과를 만드는 함수 - reduce 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✅ 결과를 만드는 함수 map과 filter는 이터러블 안쪽의 값을 꺼내서 기본적인 값을 유지한 채로 새로운 값을 만든다. 반대로 reduce와 take는 이터러블 안쪽의 값을 꺼내는 것은 동일하나 값을 유지시키는 것이 아닌 연산이나 특정 방식으로 값을 깨뜨려 그 결과가 합쳐진 새로운 값을 만들어낸다. 즉, 결과를 만들어 낸다. const reduce = curry((f, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } for (const a of iter) { acc = f(acc, a); } return acc; }.. 2021. 12. 27.
[10799번] 쇠막대기 문제 링크 >> https://www.acmicpc.net/problem/10799 📋 문제 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다. 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다. 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다. 아래 그림은 위 조건을 만족하는 예를 보여준다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치, 수직으로 그려진 점선 화살표는.. 2021. 12. 26.
[스택] 쇠막대기 자바스크립트 알고리즘 문제풀이 강의를 듣고 정리한 내용입니다. 📋 문제 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다. 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다. 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다. 아래 그림은 위 조건을 만족하는 예를 보여준다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치, 수직으로 그려진 점선 화살표는 레이저의 발사 방향이.. 2021. 12. 26.