2143번: 두 배열의 합 첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 www.acmicpc.net 😉문제 설명 두 배열에서 연속된 합의 숫자를 찾은 값의 합이 T가 되는 경우의 수를 찾습니다. A배열에서 찾을 수 있는 경우의 수를 찾아 객체에 넣습니다. 이 객체는 key값으로 만들 수 있는 숫자를, value로 key값을 만들 수 있는 횟수를 넣습니다. B배열에서 찾을 수 있는 경우의 수를 만들며 이 수와 A배열로 만들어진 객체의 값을 더해 T값이 나올 수 있는 경우를 찾습니다...
1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net 😉문제 설명 이 문제는 이름 그대로 최소 신장 트리 문제입니다. 최소 신장 트리는 모든 노드를 최소한의 가중치로 모든 간선을 연결 한 것을 말합니다. 문제를 풀기위해서 크루스칼 알고리즘을 사용합니다! 😎문제 풀이 const fs = require('fs'); const input = fs.readFileSync('/dev/stdin').toString().trim().split("\\n") const [V, E] =..
1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net 😉문제 설명 이 문제는 단순한 다익스트라 문제이지만, 주의해야 할 부분이 몇가지 있습니다. 하나의 출발 지점에서 하나의 다른 도착 지점으로 가는 버스 노선이 여러 개 일 수 있습니다. 따라서 최소 비용을 가진 노선만 간선에 넣어주어야 합니다. (모든 노선을 넣으면 시간 초과가 납니다.) 비용이 0인 간선이 있습니다. 아래 코드는 틀린 코드와 맞는 코드입니다. 0은 falsy값 이기 때문에 주의가 필요합니다. 틀린 코드 const..
11657번: 타임머신 첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다. www.acmicpc.net 기본적인 밸만 포드 알고리즘 문제입니다. 각 노드에서 모든 간선을 순회하며 모든 노드를 순회하는 O^2의 시간복잡도를 가집니다. 정확하게는 출발노드를 제외한 N-1개의 노드에서 E개의 간선을 순회하여 NE의 시간복잡도를 가집니다 문제풀이 let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim().split("\\n..
1865번: 웜홀 첫 번째 줄에는 테스트케이스의 개수 TC(1 ≤ TC ≤ 5)가 주어진다. 그리고 두 번째 줄부터 TC개의 테스트케이스가 차례로 주어지는데 각 테스트케이스의 첫 번째 줄에는 지점의 수 N(1 ≤ N ≤ 500), www.acmicpc.net 이 문제는 벨만-포드 알고리즘을 이용하여 풀 수 있습니다. 일반적인 벨만-포드 문제와는 다르게, 각 노드에 도달할 수 있는 최소시간을 Infinity로 하면 풀리지 않습니다. 시작 노드가 모든 점이 될 수 있기 때문에 Infinity가 아닌 0으로 초기값을 넣어 줍니다. 문제풀이 let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().split("\\n"); //테스트..
16920번: 확장 게임 구사과와 친구들이 확장 게임을 하려고 한다. 이 게임은 크기가 N×M인 격자판 위에서 진행되며, 각 칸은 비어있거나 막혀있다. 각 플레이어는 하나 이상의 성을 가지고 있고, 이 성도 격자판 위 www.acmicpc.net 이 문제는 2중 Queue를 구현하는 문제라 생각됩니다. value값으로 Queue를 가지는 배열 Queue를 만들어, 배열 Queue를 순회하면서 내부 Queue를 순회하는 방식으로 문제를 풀었습니다. 문제 풀이 let fs = require('fs'); const input = fs.readFileSync('/dev/stdin').toString().trim().split("\\n"); const [N,M,P] = input[0].split(" ").map(..