rlatmdxo1998   2년 전

1. 5~8줄에서는 도시 간의 직선거리를 구하는 함수를 정의했습니다.

2. 13~29줄에서는 시계 방향으로 도는 것과 반시계 방향으로 도는 것 중에서 값이 작은 것을 취하여 간선 정보 리스트인 c1_to_c2에 저장했습니다.
그리고 한 도시에서 다른 도시로 가는 모든 경우의 길이를 길이가 긴 순으로 정렬하고, sorted_length에 해당 도시의 정보까지 같이 저장했습니다.

3. 31~34줄에서는 sorted_length의 첫 번째에 원소에 있는 가장 긴 경로와 두 도시의 정보를 min_maxlength와 min_maxcity에 저장했습니다.

4. 36~60줄은 특정 두 도시를 연결할 때 sorted_length에 저장된 모든 간선의 길이를 길이가 긴 것부터 갱신하여 최댓값을 뽑고, 이것이 min_maxlength보다 값이 작으면 min_maxlength와 min_maxcity를 갱신하는 함수입니다.

5. 횡단도로를 만들 수 있는 모든 경우의 수에 대해 4번을 실행했습니다.

5번의 시간복잡도가 O(N^2)이고, 4번 역시 최악의 경우에는 N^2개의 간선에 대해 전부 계산을 수행하기 때문에 최악의 경우 전체 시간복잡도는 O(N^4)이고, N이 최대 300이기 때문에 시간 초과가 날 것이라고 예상했고, 그래서 55,56줄에 '값이 갱신되지 않았거나, 갱신되었지만 그 값이 현재 저장된 최장경로보다 값이 크면' 탈출하도록 약간의 꼼수를 썼습니다.
Google Colab 환경에서 N=300까지의 무작위 케이스에서 3초 안에 연산이 되어서 큰 문제가 없다고 판단했고, 맞기는 했습니다만... 원래 이렇게 푸는 것이 맞는 것인지 아니면 테스트케이스가 약해서 맞은 것인지 모르겠습니다.

댓글을 작성하려면 로그인해야 합니다.