프로그래머스[JS] > 택배 상자 꺼내기
·
🔒Algorithm
➕문제링크https://school.programmers.co.kr/learn/courses/30/lessons/389478 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr🔨문제풀이상자가 쌓여있는 구조와 비슷한 2차원 배열을 만들어서 문제를 풀 수 있었다. ( 주어진 조건을 고려하면 2차원배열을 사용하여 순회를 하여도 시간초과가 나지 않을거라고 생각되었다. ) 예를들어 n=12 w=5 num=9 이면 아래와 같은 2차원배열을 만들어서 column index가 1인 2,9,12 를 순회화면서 값을 구할 수 있었다.function solution(n, w, num) { let map = []; ..
백준[JS] > 2579번 계단오르기
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/2579문제풀이dynamic programming을 이용해서 풀수 있다. 코드에서 dp[n][0] 은 (n+1)번째 계단을 밟는데, n번째 계단을 밟고 올라온 경우의 점수합이고 dp[n][1]은 (n+1)번째 계단을 밟는데, n-1번째 계단을 밟고 올라온 경우의 점수합을 의미한다.  let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [stairCnt, ...stairs] = input.map((n) => Number(n));let dp = Array.from({ length: stairCnt }, () => { ..
백준[JS] > 18870번 좌표 압축
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/18870 문제풀이sort를 이용한 정렬, Set 객체를 이용한 중복제거 그리고 object key-value 구조를 이용하여 시간복잡도 최적화를 이용하여 문제를 풀 수 있었다. 별 어려움없이 클리어 완료!let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let N = Number(input[0]);let origin = input[1].split(" ").map((n) => Number(n));let arr = [...origin];arr.sort((a, b) => a - b);// 중복제거let set = new Set..
백준[JS] > 1620번 나는야 포켓몬 마스터 이다솜
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/1620문제풀이map을 이용해서 쉽게 풀 수 있었다. 객체를 이용하지 않는다면 시간복잡도가 올라가 시간초과로 문제를 풀 수 없다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, M] = input .shift() .split(" ") .map((n) => +n);let map = new Map();let answer = "";for (let i = 0; i
백준[node.js] > 1931번
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/1931 문제풀이이 문제는 정렬 기준을 확립하는게 핵심이다. 최대한의 많은 강의를 듣기 위해서는1. 강의의 끝나는 시간이 빠른 것 부터 오름차순2. 강의 끝나는 시간이 같을 때는 강의 시간이 가장늦은 것 부터 내림차순 but 시작하는 시간 = 끝나는 시간 일때는 뒤에 배치 해야한다. 위 조건대로 배열을 정렬할 시 최대 강의를 진행할 수 있다. 처음에는 확 와닿지 않겠지만 스스로 몇개의 케이스를 만들고 진행하다 보면 왜 위 조건으로 정렬하는지 바로 이해 할 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [..
백준[node.js] > 10026번 적록색약
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/10026 문제풀이적록색약이 아닌 사람이 보는 NxN Grid 2차원배열(map1 > R,G,B 모두 존재) 과  적록색약이 보는 NxN Grid 2차원배열(map2 > G,B만 존재 )  를 각각 만든뒤 두 2차원 배열을 탐색(bfs, dfs) 하면서 그룹핑하면 색상 영역의 수를 도출할 수 있다.   let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let N = Number(input.shift());let map1 = [];let map2 = [];let map1GroupCnt = 0;let map2GroupCnt =..
백준[node.js] > 2667번 단지번호붙이기
·
🔒Algorithm
문제https://www.acmicpc.net/problem/2667 풀이일단 지도를 2차원배열 형태로 변환시켰고 이를 이용해서 단지별로 아파트를 묶었다. dfs를 이용해서 특정 아파트에서 갈수 있는 모든 아파트를 하나의 단지로 묶었고 그 과정에서 단지내의 아파트의 갯수를 확인했다.그렇게 apartment 라는 array에 단지내의 아파트 갯수를 push 한뒤 다시 아파트갯수를 오름차순으로 정렬하여 문제의 답을 구할 수 있었다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let N = Number(input.shift());// 지도 2차원 배열로 저장let map = [];// ..
백준[node.js] > 2805번 나무 자르기
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/2805문제풀이문제조건을 보고 이분탐색이라는 느낌을 받았다. ( 아래조건 참고 )만약 이분탐색을 하지 않고 나무 높이를 하나씩 낮추면서 최댓값을 구하려면 괴랄한 연산횟수가 나온다. 하지만 이분탐색으로 탐색하면 계산횟수를 획기적으로 많이 줄일 수 있다. 이렇게 획기적으로 줄어드는 이유는 나무 높이의 범위가 너무 크기 때문이다. -> 이부분은 직접 케이스를 산정해서 테스트해보면 알 수 있다. ) let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, M] = input[0].split(" ").map((n) => Nu..
Next.js 프로젝트 메모리 사용량 확인
·
⭐FE
배경최근에 내가 개발모드로 돌리고 있는 Next.js 서버의 메모리 사용량을 알고 싶었다. 그래서 Next.js Root layout에 process.memoryUsage()를 이용하여 console 로 찍어 보았다. 코드1초 간격으로 사용중인 메모리양이 찍히도록 했다. // app/layout.tsxexport default function RootLayout(){ setInterval(() => { let memoryUsage = process.memoryUsage() let rss = Math.floor(memoryUsage.rss / 1024 / 1024) + 'MB' let heapTotal = Math.floor(memoryUsage.heapTotal / 1024 / 102..
백준[node.js] > 11727번 2xn 타일링 2
·
🔒Algorithm
문제https://www.acmicpc.net/problem/11727 풀이문제의 핵심은 다음과 같은 점화식을 구하는 것이다. dp[i] = dp[i-1] + dp[i-1]*2  dp[i] 는 2xI 직사각형의 타일을 채우는 방법이다.  해당 점화식만 도출하면 쉽게 풀 수 있다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim();let N = Number(input);let dp = Array(N + 1).fill(0);dp[1] = 1;dp[2] = 3;for (let i = 3; i