백준[JS] > 1697번 숨바꼭질
·
🔒Algorithm
➕문제링크https://www.acmicpc.net/problem/1697🔨문제풀이bfs를 이용하돼 불필요한 연산은 처리하지 않는 방향으로 최적화 하였다. ( dp[ i ] 는 i지점을 가는 데 걸리는 최소시간 )let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim();let [N, K] = input.split(" ").map((n) => Number(n));let dp = Array(100001).fill(Infinity);let endPoint = 100000;let index = N;let answer = undefined;dp[N] = 0;let queue = [[N, 0]];while (queue.le..
백준[JS] > 13305번 주유소
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/13305문제풀이특이하게 이 문제는 서브태스크가 걸려있다. 아래 3개의 조건이 있는데 이 모든 3개의 조건을 통과하는 경우 100점을 받을 수 있다. 처음에 나는 1,2번 조건을 만족하는 코드를 작성하여 58점을 받았고 그 코드기반으로 조금의 수정을 통해 100점을 받을 수 있었다. 😭58점 풀이let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let roadArr = input[1].split(" ").map((n) => Number(n));let priceArr = input[2].split(" ").map((n) =..
백준[JS] > 1244번 스위치 켜고 끄기
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/1244문제풀이스위치를 어레이형태로 표현해서 이를 다루었다. switchArr[n] 은 n번째 스윗치의 상태를 알려준다 ( 1 또는 0 ) 이 이후에는 구현능력에 달려있다. 어렵지 않게 풀 수 있었다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let switchCount = Number(input[0]);let switchArr = input[1].split(" ").map((n) => Number(n));switchArr.unshift(undefined);for (let i = 3; i Number(v)); ..
백준[JS] > 23971번 ZOAC 4
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/23971문제풀이조금만 생각하면 바로 연산과정을 떠올릴 수 있는 문제이다.// https://www.acmicpc.net/problem/23971let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim();let [H, W, N, M] = input.split(" ").map((n) => Number(n));let answer = 0;answer = Math.ceil(W / (M + 1)) * Math.ceil(H / (N + 1));console.log(answer);
백준[JS] > 14719번 빗물
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/14719문제풀이일단 블록이 쌓여있는 형태를 2차원 배열로 만들었다. 그리고 맨위 row부터 빗물이 쌓이는 조건을 충족시 해당 빗물을 카운팅하면서 쌓이는 빗물의 양을 계속 합산하였고 이를 맨 아랫줄 row까지 진행하면 쌓인 빗물의 양을 알 수 있다. 아이디어를 떠오르기까지가 꽤 걸렸다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [H, W] = input .shift() .split(" ") .map((n) => Number(n));let map = Array.from({ length: H },..
백준[JS] > 1446번 지름길
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/1446문제풀이DP로 연산횟수를 최적화하여 풀 수 있다. dp[1]은 1의 거리를 갔을 때 최소거리를 의미하며 순서대로 dp[1], dp[2], dp[3] ... 채워가면서 마지막에 dp[D]를 구할 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, D] = input .shift() .split(" ") .map((n) => Number(n));let dp = Array(D + 1).fill(0);let shortcut = input.map((str) => { return st..
백준[JS] > 20125번 쿠키의 신체 측정
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/20125풀이일단 위아래좌우 모두 *인 곳이 심장이므로 심장을 먼저 찾고 이를 기준으로 각 신체부위를 측정하는 방식으로 신체를 측정할 수 있었다. 딱히 어려운부분 없고 구현능력을 보는 문제였다.// https://www.acmicpc.net/problem/20125let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let N = Number(input.shift());const isInner = (r, c) => { return r >= 0 && r = 0 && c
백준[JS] > 9655번 돌게임
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/9655풀이직접 N=1,2,3,4,5, ... 일 때 SK인지 CY인지 확인해보면 그 규칙성이 보인다. 규칙성을 확인한 순간 문제는 쉽게 풀린다. 처음 접근할때는 만약 돌이 2개있다면 상근(SK)이가 한번에 2개 다 가져갈 수 있을 줄 알았는데 2개 가져갈 수 없다고 가정하고 문제를 풀어야 한다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString();let N = Number(input);let answer = "SK";if (N % 2 === 0) { answer = "CY";}console.log(answer);
백준[JS] > 11403번 경로 찾기
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/11403풀이문제를 풀긴 풀었는데 플로이드 와샬의 점화식을 이용하진 않았다. 해당 점화식을 이용해서 풀면 더 짧은 코드로 작성이 가능하다. 나는 하나의 점을 방문하면서 기존 graph를 갱신하는 방향으로 문제를 풀고 이미 방문한 점은 다시 방문하지 않는 방식으로 계산을 최적화 하였다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [pointsCnt, ...arr] = input;let graph = arr.map((str) => { return str.split(" ").map((n) => Number(n)..
백준[JS] > 7568 덩치
·
🔒Algorithm
✅문제링크https://www.acmicpc.net/problem/7568🔵문제풀이전체탐색을 통해 값을 도출할 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [peopleCount, ...info] = input;info = info.map((str) => { return str.split(" ").map((n) => Number(n));});let answer = [];for (let i = 0; i { if (compareW > weight && compareH > height) { ++cnt; } });..