반응형

JavaScript 209

백준 1405 : 미친 로봇 - javascript(dfs)

문제 출처 https://www.acmicpc.net/problem/1405 정답 풀이 dfs를 활용해서 풀었다.  임의로 그래프를 생성해서 방문한 위치인지 확인해줘야 하는데 이때 그래프 크기는, 세로 가로 N*2+1 크기로 두면 된다.  그리고 처음 위치는 [N,N]으로 둔다  확률은, 해당 방향으로 이동했을 때 확률을 계속 곱해준후, N만큼 이동했을 때 총 단순환 확률에다가 더해준다.  정답 코드 const [N, e,w,s,n] = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ').map(v => +v); let simple = 0 const dx = [0, 0, 1, -1] //동서남북const dy = [1,-1, 0, ..

백준 2458: 키 순서 - javascript(dfs)

문제 출처 https://www.acmicpc.net/problem/2458 정답 풀이순위를 확신할 수 있는 학생은자기보다 작은 학생 수 + 자기보다 큰 학생 수에서  -1 한 값이 n과 같은 학생이다.  +총 학생 수가 6명일 때 나보다 작은 학생이 3명이고, 나보다 큰 학생이 2명이면 나는 4번째 순서라는 것을 알 수 있음  dfs 탐색을 통해서 나보다 몇명이 큰지 계산하고, 나보다 작은 학생이 몇명인지 계산한다.  그 후, 그 합에서 -1 한 값이 n과 같으면 answer+= 1 을 한다. ! 정답 코드  let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [n,m] = input[0].sp..

백준 1516 : 게임 개발 - javascript(dp , 위상정렬)

문제 출처 https://www.acmicpc.net/problem/1516 정답 풀이 위상 정렬 (Topological Sort)을 사용하여 해결할 수 있다. 문제에서 각 건물을 짓기 위해 필요한 시간과 그 건물의 선행 조건을 만족해야 하는 다른 건물들이 제시된다.  - 위상 정렬을 통해 건설 순서를 찾고, - 각 건물이 건설되기까지 걸리는 시간을 계산한다.  기본 과정 1. 각 건물마다 걸리는 건설 시간 저장 2. 각 건물에 대해 먼저 지어야 하는 건물의 관계를 그래프로 저장 3. 위상 정렬을 수행하면서, 각 건물의 최대 건설 시간을 계산 ### 위상 정렬이란? 위상 정렬은 방향성이 있는 비순환 그래프 에서 각 노드를 순서대로 나열하는 방법이다. 즉, 선행 조건을 가지는 작업들을 그 조건에 맞게 처리..

백준 3584 : 가장 가까운 공통 조상 - javascript(dfs)

문제 출처 https://www.acmicpc.net/problem/3584 정답 풀이 이거는 사실 입력처리 하는 것이 까다로웠던 것 같다.  문제를 푸는 핵심은 - 각 노드의 부모를 배열에 저장을 한다. - 하나 노드의 모든 부모를 배열 (= 조상 배열)로 정리한다.   - 함수로 만들 것 - 비교해야 하는 노드 두개의  조상 배열을 비교한다. - 뒤에서부터 비교해서 일치하지 않을 때 그때의 조상이 답이 된다.   readline 모듈을 사용하여 입력을 한 줄씩 받아 배열 input에 저장한다. 입력이 완료되면 on('close') 이벤트가 실행되어 본격적으로 문제를 처리한다. const readline = require('readline');const rl = readline.createInterfa..

취준 2024.10.02

백준 13325: 이진트리 - javascript(트리)

문제 출처 https://www.acmicpc.net/problem/13325 정답 코드 const fs = require('fs');const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');let k = Number(input[0]); // 트리의 높이let size = Math.pow(2, k + 1) - 1; // 트리의 전체 노드 수let arr = new Array(size + 1).fill(0); // 노드의 가중치를 저장하는 배열// 트리의 가중치 입력let weights = input[1].split(' ').map(Number);for (let i = 2; i = size) { ans += arr..

백준 11066: 파일 합치기 - javascript(dp)

문제 출처 https://www.acmicpc.net/problem/11066 정답 코드 전략1. 주어진 파일을 순서대로 합치고, 파일을 합치는 비용은 두 파일 크기의 합이다. 2. 여러 파일을 합치기 위해 최적 부분 구조를 활용한 dp를 사용하여, 부분 문제들의 최솟값을 저장하며 문제를 해결한다. 3. 합칠 파일의 범위를 설정하고, 그 범위 내에서 파일을 합치는 최소 비용을 찾는 방식으로 접근한다.  해결 과정1. 먼저 각 파일의 크기를 저장하고, 파일의 누적합 배열을 미리 구한다. 2. dp 테이블을 설정하여 각 구간에서의 최소 비용을 기록한다. 3. 주어진 파일들을 두 그룹으로 나누고, 각 그룹을 합친 뒤 다시 합치는 비용을 반복적으로 계산한다.  누적합 배열 : 0번째 부터 i 번째 파일까지의 크..

백준 16987: 계란으로 계란치기 - javascript(백트래킹, 완전탐색)

문제 출처 https://www.acmicpc.net/problem/16987 정답 풀이 완전 탐색을 이용한다. 정답 코드 //계란으로 계란 치기 //-각 계란 내구도, 무게 //-상대 계란의 무게만큼 계란의 내구도가 깍임 //-계란 0이하 깨짐 //일렬 계란, 차례로 들어, 한번씩 다른 계란 쳐 => 최대한 많은 계란 깨기 let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')const n = Number(input.shift()); let egg = input.map(el => el.split(' ').map(v => +v)); function solution(n,egg){ let max = 0 f..

프로그래머스 : 소수 찾기 - javascript(완전탐색, 소수 판별)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/42839?language=javascript 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 정답 풀이 아래 두개의 함수를 작성하면 된다  numbers로 순열을 구하는 함수  해당 숫자가 소수인지 확인하는 함수  정답 코드 function solution(numbers) { let answer = new Set() for(let i=1; i el.join('')) let prime = check(format) p..

백준 4256 : 트리 - javascript(트리)

문제 출처 https://www.acmicpc.net/problem/4256 정답 풀이 정답 코드 const fs = require('fs');const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');let idx = 0;const T = parseInt(input[idx++]); // 테스트 케이스 수let sb = '';function findPostOrder(rootIdx, begin, end, N, preOrder, inOrder) { if (rootIdx >= N) return; // base case: 루트 인덱스가 배열 범위를 벗어나면 리턴 const rootValue = preOrder[rootIdx];..

백준 2225 : 합분해 - javascript(dp)

문제 출처 https://www.acmicpc.net/problem/2225 정답 풀이 핵심 아이디어:dp[k][n]은 K개의 수로 N을 만드는 방법의 수를 의미합니다. 이를 구하기 위해서, 두 가지 상황을 고려합니다:dp[k][n-1]: K개의 수로 N-1을 만드는 경우에, 추가로 1을 더한 경우입니다. 즉, N을 만들기 위해 마지막에 1을 추가하는 방법입니다.dp[k-1][n]: K-1개의 수로 N을 만드는 경우에, 추가로 0을 하나 추가하는 방법입니다. 즉, N을 만들기 위해 마지막 수로 0을 더하는 방법입니다.이 두 가지를 더하면 dp[k][n]이 구해집니다.예시:N = 5, K = 3인 경우를 생각해보겠습니다. 즉, 숫자 5를 3개의 숫자의 합으로 나타내는 경우의 수를 구하는 문제입니다.1. d..

반응형