백준

문제링크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값들을 이용해 확인하는 형..
문제링크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..
문제링크https://www.acmicpc.net/problem/1764문제풀이듣지 못한 사람의 이름을 set 객체에 담아두었다가, 보지 못한사람 리스트를 순회하면서 해당 이름이 set 객체이 존재할 경우 이를 answer array에 담으면서 중복된 사람을 찾을 수 있었다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, M] = input .shift() .split(" ") .map((n) => Number(n));let set = new Set();for (let i = 0; i
문제링크https://www.acmicpc.net/problem/1238문제풀이플로이드 와샬 알고리즘을 이용해서 풀 수 있다. 플로이드 와샬 시간복잡도가 O(n^3) 이기 때문에 시간초과의 염려이 있었지만 다행히 통과!// https://www.acmicpc.net/problem/1238let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, M, X] = input .shift() .split(" ") .map((n) => Number(n));let graph = Array.from({ length: N }, () => { return Array(N).fi..
문제링크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..
문제링크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
문제링크https://www.acmicpc.net/problem/7662문제풀이나는 이 문제를 풀기 위해 최대힙, 최소힙을 만들고 실제로 힙에 존재해야 할 숫자들을 Map 객체로 관리하였다.( Primary Queue 를 자바스크립트로 구현하기 위해선 직접 Class 객체를 만들어야 해서 어쩔 수 없이 코드가 길어진 점 이해 부탁드립니다. )  연산 과정은 이러하다.  - I 연산일 때는 최대 힙, 최소 힙에 숫자를 넣었고 - D 1 연산일 때는 최대힙에서 최대 숫자를 뽑고- D -1 연산일 때는 최소힙에서 최소 숫자를 뽑았다. - I 연산으로 숫자를 넣을 때는 map 객체에서 해당 숫자의 갯수를 +1- D 연산으로 숫자를 뺄 때는 map 객체에서 해당 숫자의 갯수를 -1  이런 과정을 거치면 힙에 들어..
문제링크https://www.acmicpc.net/problem/1931 문제풀이이 문제는 정렬 기준을 확립하는게 핵심이다. 최대한의 많은 강의를 듣기 위해서는1. 강의의 끝나는 시간이 빠른 것 부터 오름차순2. 강의 끝나는 시간이 같을 때는 강의 시간이 가장늦은 것 부터 내림차순 but 시작하는 시간 = 끝나는 시간 일때는 뒤에 배치 해야한다. 위 조건대로 배열을 정렬할 시 최대 강의를 진행할 수 있다. 처음에는 확 와닿지 않겠지만 스스로 몇개의 케이스를 만들고 진행하다 보면 왜 위 조건으로 정렬하는지 바로 이해 할 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [..
문제링크https://www.acmicpc.net/problem/5430문제풀이R 연산을 해야할 시 실제 배열을 앞뒤를 변경하게 계산속도 차원에서 효율적이지 못하다. 따라서 원본 배열의 원소의 순서를 뒤집기 보다는 앞에서 원소를 제거 or 뒤에서 원소를 제거 하는 방식으로 문제를 풀어야 시간초과 없이 문제를 풀 수 있다. 나는 direction 이라는 변수의 값을 기준으로 배열의 원소를 제거하는 방향을 파악하여 이를 진행하였다. 문제를 다 풀고나서 보니 풀이가 꽤나 긴거 같은데 추후 시간나면 줄여봐야겠다. ( 다른사람풀이 : https://tesseractjh.tistory.com/250 )let fs = require("fs");let input = fs.readFileSync("/dev/stdin")..
문제링크https://www.acmicpc.net/problem/9461문제풀이dp[i] = dp[i - 1] + dp[i - 5]; 라는 점화식만 도출하면 쉽게 풀 수 있는 문제이다.( i 번째 삼각형의 한변의 길이 =  i-1번째 변의 길이 + i-5번째 변의 길이 ) let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");const testCaseCount = Number(input.shift());input = input.map((n) => Number(n));let dp = [0, 1, 1, 1, 2, 2, 3, 4, 5, 7, 9]; // P(1) P(2) P(3) P(4) p(5..
devWarrior
'백준' 태그의 글 목록