[알고리즘] 문제풀이 연습 69

[c++] vector 컨테이너 사용법

// Vector 컨테이너의 모든 것 // C++ STL의 Sequence Container 중 자주쓰는 vector #include #include using namespace std; int main() { vector v; //벡터 v 선언 // 00000 출력 vector v2(5); //0으로 초기화된 5개의 원소를 가진 벡터 선언 // 22222 출력 vector v3(5, 2); //2로 초기화된 5개의 원소를 가진 벡터 생성 //v2를 v1복사해 생성 vector v4(v); /* vector의 멤버 함수 */ //참조한다는 것은 해당 데이터를 리턴한다는 뜻 //22222 출력 (5의 원소를 2의 값으로 할당) v.assign(5, 2); // idx번째 원소를 참조 // 2번째 원소참조하..

[알골90제] 81번 - 벨만포드 알고리즘(다시풀기)

최소 비용으로 출발정점에서 도착정점까지 가는 경로를 찾는 것 - 간선을 1번만에 갈 수 있다 - 간선을 2번만에 갈 수 있다 - 간선을 3번만에 갈 수 있다 . . . 정점이 5개면 간선을 5개를 썻다면,,? 2번 정점을 2개 들린 회로가 발생한다는 것 싸이클이 있다는 것은 가중치가 음수인 값이 있다는것 => 음의 싸이클이 존재하지 않는 한 벨만포드 사용가능 => 노드가 5개라면 간선 5개를 택할 수 없음 정점이 n개면 간선을 n-1개 사용하는 것이 가장 긴 경로다

[알골90제] 80번 - 다익스트라 알고리즘

1. 노드 배열을 만들어서 1번 정점은 0으로 초기화하고 나머지는 무한대값(아주큰값)으로 최대한 해놓음 2. 돌면서 최솟값을 찾음 3. 1번정점 체크 4. 1번 정점에서 갈 수 있는 방향으로 다 간다. 5. dist 배열을 relax해준다. => 값이 더 좋으면 바꿔준다. 6. dist[2] 를 보면 무한대로 되어 있기 때문에 가중치값 12는 좋은 값이기에 바꿔준다 dist[2] = 12 7. 1번에서 3으로 갈 수 있다. => dist[3] = 4 로 바꿔준다. 8. 1번은 한번 사용했기 때문에 다시 사용 못함 9. 2, 3번 중 작은 값인 3번이 선택됨 => dist[3]은 체크 걸어둠. 그리고 이제 dist[3] 인 3번 정점에서 다시 감 10 .1에서 3번 정점으로 가는 최솟값인 4는 선택되었기에..

[알골90제] 78/79번 - 원더랜드(Kruscal MST 알고리즘 / Union&Find 자료구조, priority queue)

1. 먼저 간선을 가중치 값으로 오름차순으로 정렬한다. 2. 간선을 선택해가면서 싸이클이 되어버리면 선택하면 안된다! 아무리 간선 가중치 값이 적다고 해도! 3. 2번 정점과 9번 정점은 최소비용신장트리의 원소로 들어옴 => 이때 Union & Find로 집합을 만들어서 연결시켜버린다. 4. 2와 3을 연결하는 가중치값 10 인 간선 => 이 간선을 선택하느냐 마느냐에서 2번 정점을 find로 하고, find 3을 하여 둘이 서로 다른 집합이면 연결한다. 2와 3도 Union 한다. 5. 이런식으로 계속 간선값을 누적한다. 6. 이미 2번과 8번 정점은 연결되어 있는 상태이기 때문에 선택하지 않는다. => 회로가 되면 안된다! 싸이클을 피해라! 7. find 8 find 9는 이미 트리의 집합의 원소로 ..

[알골90제] 73/74번 - 최대힙/최소힙 : 우선순위큐

우선순위큐 - 맥스힙 구조 STL 사용 최대힙/최소힙 관련 : https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html [자료구조] 힙(heap)이란 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io 최대힙 최대힙을 사용한 우선순위큐 STL 을 통해 문제를 풀어보자 // 73번 - 최대힙(priority_queue : 우선순위 큐) #define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; int main() { freopen("input.txt", "rt", ..

[알골90제] 71번 - 송아지 찾기 (BFS: 상태트리탐색)

* 문제 최소 몇번의 점프로 현재 위치 S에서 송아지 위치 E까지 갈 수 있는지 - 직선의 좌표점은 1부터 10000까지 - 한번의 점프로 앞으로 1 뒤로 1 앞으로 5까지 갈 수 있다. ex. 현재 위치 5에서 송아지 위치 14까지는 3번만에 갈 수 있다. 10 15 14 +5 +5 -1 어떤 정점에서 어떤 정점까지 최단거리!를 구하여라 이런 것은 BFS 사용 * 상태트리 만들기 1. 5를 만들고 5에서 한번만에 갈 수 있는 것 다 트리로 만들기 2. 각 트리에서 또 2번만에 갈 수 있는 지점 만들기 이미 큐에 들어간 자료 ex.5는 체크를 걸어서 다시는 큐에 들어가지 않게 체크를 해버린다. 큐에 넣어가며, 상태트리를 만들며 1번 만에 가는 것 보기 2번 만에 가는 것 보기 3번 만에 가는 것 보기 ...