문제링크https://www.acmicpc.net/problem/16953풀이최소 연산 횟수를 구하는 작업이기 때문에 dfs 보단 bfs로 푸는게 더 좋은 방법이다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString();let [start, target] = input.split(" ").map((n) => Number(n));let arr = [[start, 1]];let answer = undefined;while (arr.length) { let [num, cnt] = arr.shift(); if (num === target) { answer = cnt; break; } l..
티스토리챌린지
문제https://www.acmicpc.net/problem/9095 풀이dp로 푼 문제풀이이다. 이 풀이가 최적화된 풀이이고 밑에 보면 dfs로도 푼 문제가 있다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");input = input.map((n) => Number(n));for (let i = 1; i 처음에 dfs로 접근했는데 그럴 필요가 없었다. 참고차 남겨둔다. let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");input = input.map((n) ..
문제링크https://www.acmicpc.net/problem/15650 풀이-1let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString();const [N, M] = input.split(" ").map((n) => parseInt(n));if (N === M) { answer = ""; for (let i = 1; i { if (rest === 0) { answer = answer + `${arr.join(" ")}\n`; } else { for (let i = start; i 풀이-2같은 문제를 다른 방식으로도 풀어봤다.let fs = requi..
문제https://www.acmicpc.net/problem/1966 풀이배열자체를 변형시키기 보단 바라보는 idx를 증가시키면서 배열을 순회했다. 어려움 없이 풀 수 있었다.const fs = require("fs");const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [caseCnt, ...caseArr] = input;caseCnt = +caseCnt;for (let i = 0; i Number(num)); let max = Math.max(...arr); let answer = 1; let idx = 0; while (1) { if (arr[idx] !== -1 && arr[..
시험일시2024년 11월 17일 11시 ~ 오후 2시 (2시간)인증서후기PCCP lv1를 맞은 후 낙담하고 준비를 더한 뒤 시험을 치루고 lv3을 맞았다.1번 문제는 자료구조 및 구현, 2번 문제는 로직 및 2차원 배열, 3번 문제는 로직구현, 2차원배열, bfs등을 물어보는 문제 같았다. 4번은 문제를 풀다가 시간이 없어서 풀지 못했지만 시간만 주어졌다면 문제를 풀 수 있을 것 같아 아쉬었다.1번은 15~20분 2번은 35분? 3번은 45분? 정두에 풀었다. 내가 알기론 1,2,3,4 번 순서대로 배점이 200, 300, 300, 200 인걸로 알고 있는데 시험을 보고 680점?을 맞았다.1,2,3번을 모두 완벽하게 맞추었다면 800점이 나와 레벨 4가 나왔을 텐데 너무 아쉬었다. 더욱 더 아쉬운건 이..
터보팩? 뭐야?npx create-next-app@latest 를 이용하여 넥스트 프로젝트를 시작하면 터보팩을 사용할지 말지를 물어보는 질문이 나온다.생각해보니 터보팩이 뭔지 찾아본적이 없어 터보팩에 대해 찾아보았다. https://nextjs.org/docs/architecture/turbopack#generating-trace-files Architecture: Turbopack | Next.jsTurbopack is an incremental bundler optimized for JavaScript and TypeScript, written in Rust, and built into Next.js.nextjs.org 공식문서 기반을 요약하자면 이렇다. 터보팩은 뭐냐? -> 자바스크립트, 타입스크..
문제https://www.acmicpc.net/problem/1629 풀이js에서 BigInt를 많이 다뤄보지 않아서 굉장히 생소해서 많이 버벅 거렸다.BigInt는 2^53-1를 js 내에서 다룰 수 있는 내장객체이다. 이 문제를 풀기 위해서는 해당 객체를 이용해야 한다. 왜냐하면 주어진 A,B,C 의 범위가 2,147,483,647 이하이기 때문에 2,147,483,647의 제곱승만 되도 이미 BigInt를 다뤄야 한다. 이 문제를 풀기위해서 핵심은 다음과 같다 1. (A * B) % C = ((A%C) * (B%C))%C 이다-> 자바스크립트에서 큰숫자의 연산보단 작은숫자의 연산 속도가 훨씬 빠르기 때문에 이를 이용하여 나머지들을 곱하는게 속도차원에서 좋다 2. 2^10 을 구하기 위해 2를 ..
문제https://www.acmicpc.net/problem/1916 풀이처음에 dfs로 접근해서 풀었는데 시간초과로 틀려서 dp를 이용했다. 일단 map이라는 2차원 배열을 구현한다. 이 2차원 배열의 map[ i ][ j ] 는 i도시에서 j 도시로 갈 시 가장 가격이 싼 버스 요금을 나타 낸다. 만약 map[ i ][ j ] = Infinity 이면 해당 루트는 버스가 다니지 않는다고 생각하면 된다. 그리고 dp라는 2차원 배열을 구현한다. dp[ i ][ j ] 는 i 도시에서 j 도시로 가는 루트는 가장 버스요금이 싼 루트의 요금을 나타낸다.우리는 모든 경로를 탐색하면서 2차원 배열 dp를 완성시키고 최종적으로 dp[출발점][도착점] => 최소비용 을 구하면 된다. const fs = req..
문제링크https://www.acmicpc.net/problem/11660 문제풀이이 문제는 언뜻보면 쉬어보인다. 하지만 단순하게 풀면 연산횟수가 너무 많아 시간초과가 난다. 연산횟수를 확인히 줄이기 위해 dp(동적계획법-dynamic programming)를 이용해야 한다. dp를 생각하는 순간 문제는 쉬어진다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [tableInfo, ...arr] = input;let [N, M] = tableInfo.split(" ").map((num) => Number(num));let table = [];for (let i = 0; i N..
문제링크https://www.acmicpc.net/problem/9465 풀이처음에는 dp(다이나믹 프로그래밍) 을 생각하지 못하여 고전했다.여기서 map은 스티커들의 배열을 의미하고 dp[0][i] 는 첫번째줄의 i+1번째 스티커 사용했을 때 가질 수 있는 최대 총점dp[1][i] 는 두번째줄의 i+1번째 스티커를 사용했을 가질 수 있는 최대 총점dp[2][i] 는 i+1번째의 스티커 어느것도 사용하지 않았을 때 가질 수 있는 최대 총점 이다. dp[0][0] dp[1][0] dp[2][0] 부터 마지막 열까지 진행하면 나올 수 있는 최대 점수들을(dp[0][n-1], dp[1][n-1], dp[2][n-1]) 구할 수 있고 dp[0][n-1], dp[1][n-1], dp[2][n-1] 값중 최댓 값..