목록PS/알고리즘 문제풀이 (157)
득이공간

1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net #include #include #include using namespace std; void TestCase() { int N, M; cin >> N >> M; deque PrinterQueue; for (int i = 0; i > Priority; PrinterQueue.emplace_back(Priority, i); } int Cnt = 1; while (!PrinterQueue.empty()) { int..

1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net #include #include #include using namespace std; vector Sequence; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; Sequence.reserve(N); for (int i = 0; i > Number; Sequence.emplace_back(Number); } sort(Seque..

1922번: 네트워크 연결 이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다. www.acmicpc.net #include #include #include using namespace std; vector EdgeList; vector RootNode; bool Compare(const vector& Left, const vector& Right) { return Left[2] < Right[2]; } int Find(const int& Node) { if (Node != RootNode[Node]) { RootNode[Node] = Find(RootNode[Node]); } return RootNode[Node]; } bool Union(const int..

1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net #include #include #include using namespace std; vector EdgeList; vector RootNode; bool Compare(const vector& Left, const vector& Right) { return (Left[2] < Right[2]); } int Find(int Node) { if (Node != RootNode[Node]) { RootNode[Node]..

11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 길이가 양수인 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net #include #include using namespace std; vector Distance; void FloydWarshall(int N) { for (int K = 0; K < N; ++K) { for (int Start = 0; Start < N; ++Start) { for (int End = 0; End < N; ++End) { if (Distance[Start][K] == 0 || Distance[K][End] == 0) { continue; } Distance[Start][E..

11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net #include #include #include using namespace std; const int& Infinite = INT_MAX; vector Distance; void FloydWarshall(int N) { for (int K = 0; K < N; ++K) { for (int Start = 0; Start < N; ++Start) { for (int End = 0; End < N; ++End) { if (Distance[Start][K] == Inf..

1865번: 웜홀 첫 번째 줄에는 테스트케이스의 개수 TC(1 ≤ TC ≤ 5)가 주어진다. 그리고 두 번째 줄부터 TC개의 테스트케이스가 차례로 주어지는데 각 테스트케이스의 첫 번째 줄에는 지점의 수 N(1 ≤ N ≤ 500), www.acmicpc.net #include #include #include #include using namespace std; const long long& Infinite = LLONG_MAX; vector EdgeList; vector Solution; queue SearchQueue; bool BellmanFord(int N, int K) { for (int i = 0; i < N; ++i) { int EdgeSize = EdgeList.size(); for (int ..

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 #include #include #include #include using namespace std; const long long& Infinite = LLONG_MAX; vector EdgeList; vector Solution; queue SearchQueue; bool BellmanFord(int N, int M, int K) { Solution.reserve(N); for (int i = 0; i..

1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net #include #include #include #include #include #include using namespace std; const int& Infinite = INT_MAX; vector Neighbors; priority_queue SearchQueue; vector Solution; vector Dijkstra(int N, int Start) { vector Times; Times.reserve(N); for (i..

1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net #include #include #include #include using namespace std; void Play() { int N, K; cin >> N >> K; vector Times; Times.reserve(N); vector EndTimes; Times.reserve(N); vector Neighbors; Neighbors.reserve(N); vector Entries; Entries.reserve(N); for (int i = 0; i ..