본문 바로가기

C30

[C/C++] 백준 11404: 플로이드 (플로이드-워셜 알고리즘) https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 플로이드-워셜 알고리즘? 알고리즘 제목에서도 알 수 있다싶이 이 문제는 한 도시에서 다른 도시까지 필요한 비용의 최솟값을 구하는 알고리즘 문제이기 때문에 그래프에서 한 지점에서 다른 지점까지의 최솟값을 구하는 알고리즘인 플로이드-워셜 알고리즘을 사용하면 된다. 특징으로는 다익스트라 알고리즘에 비해 구현이 쉽고 삼중 반복문을 사용하기 때문에 O(V^3)의 시간 복잡도를 갖는다. 삼중 반복문을 돌때 .. 2023. 9. 11.
[C/C++] 백준 11286: 절댓값 힙 (구조체와 연산자 오버로딩) https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 절댓값 힙 문제는 최소 힙 문제를 조금 변형시켜면 쉽게 풀 수 있다. 최소 힙 문제에서 priority_queue를 정의할 때 priority_queue queue;를 사용해야 했다면 이 문제에서는 절댓값이 작은 순으로 heap을 정렬시켜야하므로 세번째 자리에 greater 가 아닌 priority_queue queue;와 같은 새로 정의한 구조체를 넣어줘야한다. 참고로 pr.. 2023. 9. 5.
[C/C++] 백준 1931: 회의실 배정 (풀이) https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 이 문제는 Greedy 알고리즘 중에서 제일 유명한 문제라고 할 수 있다. 한개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의 중에 회의실을 사용할 수 있는 회의의 최대 개수를 구하면 된다. 결론부터 말하자면 끝나는 시간이 제일 빠른 회의부터 차례대로 진행할 때 회의의 개수가 최대가 된다. 각 경우마다 가장 이득이 되는 선택을 하면 되는데 그 각각의 선택이 전체적으로도 가장 이득이 되는 대표적인 예이다. 구현은 끝나는 시간 순서대로 오름차순으로 정렬을 한다. 이때 한가지 주의해야할 점은 회의의 시작시간과 끝.. 2023. 9. 5.
[C/C++] 이항 계수 2 https://www.acmicpc.net/problem/11051 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 이항 계수 문제는 사실상 Dynamic Programming 문제 중에서 가장 기초적이면서 유명한 문제라고 할 수 있다. 사실 Dynamic Programming 풀지 않아도 이항계수 계산을 범위를 초과되지 않은 기준 내에서 해결가능하기는 하다. 하지만 DP를 이용해서 푸는 것이 값이 매우 커질 경우 더 효과적일 수도 있다. DP로 풀기 위해서는 공식하나를 알아야하는데 바로 nCr=n-1Cr + n-1Cr-1 이다. 즉 nCr을 구하기 위해서는 n-1Cr 과 n-1C.. 2023. 8. 31.