백준 1620 (nodejs) https://www.acmicpc.net/problem/1620 let input = require("fs") .readFileSync("/dev/stdin") .toString() .trim() .split("\n"); let [M, N] = input[0].split(" ").map(Number); let q = new Map(); for (let i = 1; i Algorithm 2023.10.24
백준 7785 (nodejs) https://www.acmicpc.net/problem/7785 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net let input = require("fs") .readFileSync("/dev/stdin") .toString() .trim() .split("\n"); let att = new Set(); for (let i = 1; i < input.length; i++) { const [name, act] = input[i].split(" "); if (act ==.. Algorithm 2023.10.23
백준 14425 (nodejs) https://www.acmicpc.net/problem/14425 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net let input = require("fs").readFileSync("/dev/stdin").toString().trim() .split("\n") let [ N, ] = input[0].split(" ") let S = new Set() for(let i = 1; i Algorithm 2023.10.23
[nodejs] for js에서 제공하는 여러 가지 for문에 대해 알아보자. 이것들을 능숙하게 사용할 수 있어야 할 것 같다. for문만 쓰는 것보다는 fo -while, while, for in 등을 전부 사용할 수 있는게 도움이 될 듯. 1. basic 1. for문 기본적인 for문. 시작점, 범위, 값의 변화 방식을 차례로 주면 된다 for (let i = 0; i 0; j = j - 2 ) { console.log(j) } // 10 8 6 4 2 2. while 문 괄호 안의 조건이 참인 동안 반복문 안의 코드를 계속 수행한다. let n = 0; let x = 0; // n이 3보다 작다.. Algorithm 2023.08.22
Study - Array vs. Map/Set 배열과 Map/Set의 시간 복잡도를 비교해보자. 1. array - 접근 (index 활용) : O(1) - 끝에서부터 삽입, 제거 : O(1) .push(), .pop() - 시작에서부터 삽입 제거 : O(n) .shift(), unshift() 그래서 stack 같은걸 구현할 때 shift, unshift를 쓰면 시간 초과로 틀리고, push, pop쓰면 풀리는 경우가 있었다. 단, shift, unshift처럼 배열의 처음 부분을 조작하는 method가 O(n) 인지, O(1)인지는 언어마다 다르다고 함. js는 O(n)이다. 첫 번째 요소를 제거/삭제하면, 뒤에 있는 요소들도 전부 하나씩 당기거나 밀어줘야 한다. 2. Map, Set, Object(dictionary) 객체의 한 타입이라고 생각.. Algorithm 2023.08.17
Study - Set Set es6에 추가된 `고유한 값`들의 집합을 다루는 자료 구조이다. 즉, map과 마찬가지로 중복을 허용하지 않고, 순서가 없이 (배열에서 사용하는 idx가 없음) data를 저장한다. 1. Set 생성 map과 마찬가지로 `new` keyword를 이용해 생성한다. 초기값을 주지 않으면 빈 set이 만들어진다. const emptySet = new Set() console.log(emptySet) // Set(0) {} 배열을 인자로 주면 배열에 담긴 값으로 set을 만들 수 있다. (중복된 값은 제거됨) const numSet = new Set([1, 2, 3]) console.log(numSet) // Set(3) { 1, 2, 3 } 2. methods - Set에 값을 추가, 제거 할 때는 .. Algorithm 2023.08.17
Study - Map Map k-v 쌍으로 이루어진 자료 구조로, key를 통해 데이터에 빠르게 접근할 수 있는 자료 구조이다. 검색, 삽입, 제거, 존재 여부 확인 모두 O(1)의 시간 복잡도를 가짐. 단, 중복을 허용하지 않는다. 중복을 신경쓸 필요가 없고, 자료의 수정이 빈번하게 일어날 때 배열 대신 사용해주면 좋다. 1. 선언 js의 built-in 객체이므로 new를 이용해 사용할 수 있다. let m = new Map() console.log(m) // Map(0) {} 초기 값을 주고싶다면 iterable한 요소를 주면 된다. k-v 각각이 필요하므로, 1차 배열보다 2차 배열로 인수를 넘겨줘서 각 1차 배열의 두 요소가 k ,v가 되도록 한다. let tArr = [[1, "a"], [2, "b"], [3, ".. Algorithm 2023.08.17
백준 10815 (nodejs) 1. 풀이1 (배열, includes) let input = require("fs").readFileSync("/dev/stdin").toString().trim() .split("\n") input.shift() input.splice(1, 1) let arrA = input[0].split(' ').map(Number) let arrB = input[1].split(' ').map(Number) for(let i = 0; i Algorithm 2023.08.17
Intro 알고리즘을 본격적으로 공부해야겠다. 백준에서 단계별 문제 분류된걸 쭉 풀어보려고 하는데 무지성으로 문제의 답을 찾는데에 집중하기 보다는 문제의 의도가 뭔지, 문제를 풀기 위해 알아야 하는 건 뭔지, 이 문제를 풀며 찾아낸 내가 모르는건 뭔지, (사소한 것이라도.. map, set이 어떤 자료 구조인지, 내가 몰랐던 쓸만한 method가 있는지) 남들과 비교해 내 방식에 어떤 장단점이 있는지, (메모리 사용량, 문제 채점에 걸린 시간 등을 비교해서 차이가 크다면 그 풀이를 보고 배울점을 찾는 식으로 하고 있음) 에 집중해가며 풀어야겠다. 현재 16장을 푸는 도중이지만 복습의 의미로 14장부터 순서대로, 배울 점이 있는 문제 위주로 정리를 해보겠다. Algorithm 2023.08.17