목록JS (8)
개발일지
개요누적 합 알고리즘을 이해하고 이를 사용해서 구간 합 문제를 시간초과 없이 해결해보자. 첫번째 요소는 무조건 0으로 시작합니다. (ex. prefixSum(0, 0), arr[0][0])prefixSum(i): arr[0]~arr[i] 누적합rangeSum(i, j): arr[i]~arr[j] 구간합, 2차원 배열의 경우 rangeSum(i1, j1, i2, j2) 누적 합/구간 합 이해하기1차원 배열 누적 합/구간 합구간 합다음과 같은 배열이 존재할 때 arr[3]부터 arr[5]까지의 합을 구해보자.rangeSum(3, 5)는 prefixSum(5)에서 prefixSum(2)을 뺀 값과 같다.rangeSum(i, j) = prefixSum(j) - prefixSum(i-1) 따라서, 구간합을 빠르게..

🔗 https://www.acmicpc.net/problem/2579 동적 프로그래밍 - 타뷸레이션 방법을 사용했다. 문제 이해지켜야할 규칙은 다음과 같다.한 번에 한 계단 또는 두 계단을 오를 수 있다.연속된 세 계단을 밟을 수 없다. 마지막 도착 계단(20)을 기준으로 생각해보자. 이전 계단에서 해당 계단까지 올 수 있는 경로는 두 가지이다. 첫 번째는 이전 계단(10)을 밟지 않고 한 번에 두 계단을 오르는 경우이다. 두 번째는 이전 계단(10)을 밟을 경우다. 이 경우에는 전전 계단(25)을 밟게 되면 세 계단(25-10-20)을 연속으로 밟게 되므로 규칙을 위반하게 된다. (파란 경로) 따라서 전전전 계단(15)에서 두 계단 → 한 계단씩 오를 수 있어야한다. (빨간 경로) 구현let..
알고리즘 문제를 풀려면 배열은 필수적으로 사용하게 된다.아무리 봐도 맞는 로직인데 답이 이상해서 보면 배열 문제였던 경우가 많았다. 그 과정에서 알게 된 JS 배열의 특성들을 기록하고자 한다.Array().fill() vs. Array.from() - 2차원 배열 만들기let arr1 = Array(3).fill([]);arr1[0].push('a');arr1[1].push('b');arr1[2].push('c');console.log(arr1); // [["a", "b", "c"], ["a", "b", "c"], ["a", "b", "c"]]Array(3).fill([]).fill([])은 전부 동일한 객체를 채운다. (js에서는 배열도 객체다.)즉, arr1[0], arr1[1], arr1[2] 모두..

🔗 https://www.acmicpc.net/problem/24511 내장함수 pop, push, shift 사용하면 간단하겠지만 당연히 시간초과가 발생한다. stack, queue 특성 고려해서 시간초과 없이 해결해보기문제 이해.40 1 1 01 2 3 432 4 7 다음과 같이 두 개의 큐와 두 개의 스택으로 이뤄진다.A: [1] // A큐B: [2] // B스택C: [3] // C스택D: [4] // D큐 첫 번째 원소 ‘2’를 삽입 했을 때의 과정을 알아보자.‘2’를 A큐에 push A: [1, 2] → 큐이므로 ‘1’ pop A: [2]반환된 ‘1’을 B스택에 push B: [2, 2] → 스택이므로 ‘두번째 2’ pop B: [2]반환된 ‘2’를 C큐에 push C: [3, 2] ..
개요프로세스 동기화를 공부하면서 Node.js에서도 동기화 기법이 적용되는지 궁금해졌다. JS는 싱글스레드 기반인데 async-mutex, async-sema와 같이 마치 동기화를 제공하는 듯한 패키지가 존재했기 때문이다. 결론부터 말하자면 JS는 “비동기 작업의 경쟁 조건(race condition)”이 발생할 수 있다. 일반적인 멀티스레드 동기화 개념과는 조금 다르지만 이 개념을 비동기 작업에 적용한 것이다. 이번 글에서는 프로세스 동기화 개념에 대해 간략히 알아본 뒤 JS의 동기화는 어떻게 다른 지 비교해보고 직접 구현까지 해보고자 한다. 프로세스 동기화여러 프로세스가 협력하는 작업이 있을 때 이 프로세스들은 동시다발적으로 실행되면 안된다. 이를 방지하기 위해서는 동기화가 필수적으로 이뤄져야한다. ..

노드js 개발자로 일한 지 약 1년. 슬슬 js 초급 단계를 벗어나고싶다는 생각이 들었던 참에 이 책을 접하게 되었다. “코어 자바스크립트”와 “모던 자바스크립트 Deep Dive” 두 책 중 고민했었는데 이 책을 고른 이유는 일단 얇아서 부담이 없었다. 그리고 다 읽어본 결과 얇지만 알차다. 정말 핵심만을 모아둔 느낌이었다. java, python을 쓰던 나에게 js는 조금은 이질적인 언어였다. 예를 들어 this가 내가 알던 this가 아닌 느낌? 개발하면서도 소소한 궁금증들이 피어나기 시작했다. “선언 함수는 왜 호출 위치에 영향을 받지 않는 거지?”, “call, apply, bind 함수는 무슨 이유로 만들어졌을까?” 와 같은. 신기하게도 이 책은 그런 평소 궁금했던 점들만 모아서 알기 쉽게 풀..