백준[node.js] > 30804번 과일 탕후루
·
🔒Algorithm
문제https://www.acmicpc.net/problem/30804 풀이처음 풀이는 시간초과가 나서 연산횟수를 줄이는 방법으로 접근하였다.  내가 푼 방식은 이러하다만약 과일이  1 2 2 3 3 4 5 6 7 8 9 이렇게 주어지면 [ 1 ] 을 담고 kind를 확인 한다.  ( kind:1, count: 1 )[ 1, 2 ] 를 담고 kind, count를 확인한다.  (kind:2 count:2)[ 1 , 2 , 2 ] 를 담고 kind와 count를 확인한다. (kind:2, count: 3 ) 그다음  과일을 담으면[ 1, 2 , 2, 3 ] 이 되고 kind는 3이 된다 이때 kind가 2가 될때까지 left를 올린다. 여기서는 [ 2, 2, 3] 이 될 것이다. 이후에 kind와 coun..
백준[node.js] > 1463번 1로 만들기
·
🔒Algorithm
문제https://www.acmicpc.net/problem/1463 문제풀이dp로 접근하지 않으면 시간초과가 나는 문제였다. 문제풀이의 핵심은 아래 점화식이다. 여기서 dp[i] 는 i를 만들기 위해서 필요한 연산 횟수이다. ( dp[1]=0, dp[2]=1, dp[3]=1 이다 )   1 ) i가 3의배수이고 2의 배수일 때dp[i] = Math. ( dp[i/3] +1 , dp[i/2] +1 , dp[i-1] +1 )    2 ) i가 3의 배수이고 2의 배수가 아닐때dp[i] = Math. ( dp[i/3] +1 , dp[i-1] +1 )    3 ) i가 2의 배수이고 3의 배수가 아닐때dp[i] = Math. ( dp[i/2] +1 , dp[i-1] +1 )     let fs = requir..
백준[node.js] > 1541번 잃어버린 괄호
·
🔒Algorithm
문제https://www.acmicpc.net/problem/1541 문제풀이첫번째 for문에서 [ '+1' , '-2' , '-3' , '+2' , '+2' , '3' ] 와 같은 arr를 생성하고 두번째 for문에서 answer을 계산한다 핵심은 음수 이후에 연속적으로 양수가 나올 때 해당 양수는 결국 음수로 계산해야 최솟값을 구할 수 있다는 점이다.예시) 1-2+3+3 => 1-(2+3+3)  이런식으로 음수이후로 연속적으로 나타나는 양수는 모두 음수처리 후 모든 수들을 합하면 최솟값을 구할 수 있다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim();let num = "";let numArr = [];..
백준[node.js] > 17129번 비밀번호 찾기
·
🔒Algorithm
문제https://www.acmicpc.net/problem/17219 문제풀이주소에 중복이 없다고 하길래 Set 객체를 안쓰고 그냥 Object를 활용해서 문제를 풀었다. 아주 기본적인 문제이다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, M] = input .shift() .split(" ") .map((n) => parseInt(n));let obj = {};for (let i = 0; i
백준[node.js] > 12865번 평범한 배낭
·
🔒Algorithm
문제https://www.acmicpc.net/problem/12865 풀이let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let [N, K] = input[0].split(" ").map((num) => Number(num));let arr = [];for (let i = 1; i Number(num)));}let dp = Array.from({ length: N + 1 }, () => { return Array(K + 1).fill(0);});for (let row = 1; row = weight) { dp[row][col] = Math.max(dp[ro..
백준[node.js] > 15654번 N과 M (5)
·
🔒Algorithm
문제https://www.acmicpc.net/problem/15654 풀이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 num_arr = input[0].split(" ").map((n) => Number(n));// 정렬num_arr.sort((a, b) => a - b);let dfs = (arr, picked) => { if (arr.length === M) { console.log(arr.join(" ")); ..
백준[node.js] > 9251번 LCS
·
🔒Algorithm
문제https://www.acmicpc.net/problem/9251내풀이LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.이 문제는 유명한 문제라고 하는데 처음에 어떻게 접근할 지 몰라 다른사람들의 풀이를 참고하였다.간단하게 ACAYKPCAPCAK두문자의 LCS를 찾으려면 아래와 같은 2 차원 배열을 만들고 채워서 가장 큰 수를 확인하면 된다.       A  C  A  Y  K  P     C   A   P   C   A  K    이렇게 2차원 배열을 만들고 채우면 된다. 위 2차원배열을 dp라고 칭하면 dp[0][3] 은 문자열 C와 문자열 ACAY 의 LCS길이로 채워진다...
백준[node.js] > 16953번 A->B
·
🔒Algorithm
문제링크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..
백준[node.js] > 1966번 제출
·
🔒Algorithm
문제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[..
PCCP[JavaScript] Lv3 후기
·
➕Etc.
시험일시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가 나왔을 텐데 너무 아쉬었다. 더욱 더 아쉬운건 이..