[Python] BOJ 21278 - 호석이 두 마리 치킨
728x90
반응형
21278번: 호석이 두 마리 치킨
위의 그림과 같이 1번과 2번 건물에 치킨집을 짓게 되면 1번부터 5번 건물에 대해 치킨집까지의 왕복 시간이 0, 0, 2, 2, 2 로 최소가 된다. 2번과 3번 건물에 지어도 동일한 왕복 시간이 나오지만 더
www.acmicpc.net
N이 100이하이므로 O(N^3)인 플로이드-와샬 알고리즘을 사용해도 통과가 될 것 같아서 풀어보았다.
1. M개 만큼 a와 b를 입력받고 a와 b사이의 거리를 1로 cost배열에 넣어준다.
2. 플로이드-와샬 알고리즘을 통해 각 건물 사이의 거리를 구해준다.
3. 브루트포스 방식으로 치킨집이 1번,2번일 때 부터 1번,3번 ... N-1번,N번까지일 때 모든 도시에서의 왕복 시간의 합을
비교하며 최솟값을 찾아서 출력한다.
import sys from math import inf input = sys.stdin.readline N, M = map(int,input().split()) cost = [[inf] * N for _ in range(N)] for _ in range(M): a,b = map(int,input().split()) cost[a-1][b-1] = 1 cost[b-1][a-1] = 1 for k in range(N): cost[k][k] = 0 for i in range(N): for j in range(N): cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j]) max = 1000000000 for i in range(N-1): for j in range(1, N): sum = 0 for k in range(N): sum += min(cost[k][i], cost[k][j]) if max > sum * 2: max = 2 * sum dab = [i+1, j+1, 2*sum] print(*dab)
(solved.ac 티어: 골드 5)
# 다른 사람들 풀이를 보니 bfs나 다익스트라로 푸는 방법도 많던데, 한번 시도해봐야겠다.
728x90
반응형
TAGS.