백준[JS] > 1920번 수 찾기
·
🔒Algorithm
문제https://www.acmicpc.net/problem/1920풀이자바스크립트 set 객체를 이용해 풀면 쉽게 풀 수 있다. 일단 A[1] ... A[N] 으로 주어진 수를 set객체에 담고 주어진 M개의 수를 순회하면서 set.has 메서드를 이용해 수가 set객체에 존재하는 지 확인 하고 이를 asnwer에 반영하여 문제를 풀었다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let arr = input[1].split(" ").map((n) => Number(n));let set = new Set([...arr]);let numberArr = input[3].split("..
프로그래머스[JS] > 지게차와 크레인
·
🔒Algorithm
✅문제https://school.programmers.co.kr/learn/courses/30/lessons/388353 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr🔥풀이문제를 풀 때 주의해야 할 사항이 몇가지 있는데 다음과 같다지게차로 컨테이너를 꺼낼 때 한번에 꺼내야 한다 -> 만약에 'A' 라는 출고 요청이 들어올 경우 아래와 같은 경우 맨 바깥에 있는 A만 꺼낼수 있다. 맨 바깥의 A를 꺼냈으니 빈공간이 생겼다고 가정하고 안쪽 A까지 꺼낸다고 가정 할 경우 답이 틀린다.크레인으로 꺼낸 빈공간으로 인해 지게차로 꺼낼 수 없는 컨테이너를 꺼낼 수 있으므로 지게차로 컨테이너를 꺼내기 전 반드시 크..
프로그래머[JS] > 서버 증설 횟수
·
🔒Algorithm
문제https://school.programmers.co.kr/learn/courses/30/lessons/389479 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이시간대별로 현재 서버갯수를 파악할 수 있는 servers Array를 생성하고 시간대별 유저수를 탐색하면서 증설해야되는 서버가 필요 시 이를 servers에 추가하면서 증설횟수를 카운트 하여 답을 구할 수 있었다. function solution(players, m, k) { let servers = Array(24).fill(0); let answer = 0; players.forEach((playerCnt, sTime..
백준[JS] > 1436번 영화감독 숌
·
🔒Algorithm
문제https://www.acmicpc.net/problem/1436풀이'666' 이라는 연속적인 숫자를 포함한 수들을 작은순으로 구했을 때 n번째 수를 구해야하는데 String.includes 함수를 이용해서 '666'을 포함한 수인지를 계속체크하면 n번째 작은 수를 구할 수 있다. number를 0부터 1씩 계속증가시키면서 '666'을 포함하는지 지속적으로 체크했다. ( 다행히 n이 10,000 이하의 수라고 제한이 걸려 있어 해당 풀이는 문제없다고 판단했고 문제를 풀 수 있었다. ) // https://www.acmicpc.net/problem/1436let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim();..
백준[JS] > 11726번 타일링
·
🔒Algorithm
문제https://www.acmicpc.net/submit/11726/90108724풀이2xi 크기의 타일을 채우는 방법은 2x(i-1) 크기의 타일을 채우는 방법의 수와 2x(i-1) 크기의 타일을 채우는 방법의 수를 합산한 값과 같다는 걸 알수 있어야 한다. 만약 dp[i] 가 2 x i 크기의 타일을 채우는 방법의 수라고 하면 점화식은 dp [ i ] = dp [ i-1 ] + dp [ i-2 ] 이다. 이 점화식을 이용하면 문제를 풀 수 있다. dp[1], dp[2], dp[3] 을 직접 구해보면 점화식이 성립함은 쉽게 알 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim();const n = ..
백준[JS] > 2606번 바이러스
·
🔒Algorithm
문제https://www.acmicpc.net/problem/2606풀이DFS로 접근하여 문제로 풀수 있었다. 일단 컴퓨터간 모든 연결정보를 근간으로 2차원 배열로 connectionMap을 만들었다 ( connectionMap[i][j] = true 일 경우 i+1 번 컴퓨터와 j+1 번 컴퓨터는 서로 연결되어 있고 false일 경우 연결되지 않음 ) dfs를 통해 한번 탐색에 들어간 컴퓨터의 연결정보를 다시 탐색하지 않도록 visited 라는 Array를 이용하였다. ( dfs를 통해 탐색하는 동안 isVisited[ i ] = true 일 경우 해당 컴퓨터는 이미 dfs를 통해 탐색이 된 상태 ) 그렇게 dfs 를 통해 1번 컴퓨터와 연결된 모든 컴퓨터들을 탐색하면 isVisited에 true 갯수..
백준[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] > 11047번 동전0
·
🔒Algorithm
문제https://www.acmicpc.net/problem/11047풀이(1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 라는 조건이 있기때문에 조금만 생각해보면 바로 답이 나온다. K 이하이면서 가장 큰 단위의 동전으로 일단 목표금액 K를 만드는방식으로 접근하면 문제를 풀 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, K] = input[0].split(" ").map((n) => Number(n));let answer = 0;for (let i = N; i >= 1; --i) { let coin = Nu..
백준[JS] > 7569번 토마토
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/7569문제풀이이 문제는 3차원 배열(storage)을 만들고 BFS로 그 3차원 배열의 토마토를 순차적으로 익히면 문제를 풀 수 있다. 여기서 f는 floor, r는 row, c는 column의 약자이다. 처음에는 각 위치에 있는 토마토가 익는데 걸리는 시간을 나타내는 3차원배열을 하나 더 만들어 문제를 풀었는데 시간초과가 났었다. 그래서 3차원 하나의 배열을 가지고 문제를 접근하였는데 또 시간초과가 났었다. 고심끝에 while문 내부 if문의 조건을 storage[nextF] && storage[nextF][nextR] && storage[nextF][nextR][nextC] 형태로 3차원배열의 존재여부를 key값들을 이용해 확인하는 형..
백준[JS] > 18111번 마인크래프트
·
🔒Algorithm
문제링크https://www.acmicpc.net/problem/18111문제풀이문제를 푸면서 아래와 같이 몇 가지 유의할 점만 주시하면 쉽게 풀 수 있다.  - 최종 땅의 높이는 256을 초과 할 수 없다.- 최소시간이 걸리는 땅의 높이가 여러개 일 경우 가장 높은 땅의 높이를 출력한다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [info, ...arr] = input;let [N, M, B] = info.split(" ").map((n) => Number(n));let set = [];arr = arr.map((line) => { let lineArr = lin..