일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 투 포인터
- 백트래킹
- 트라이
- 파이썬
- 2020 카카오 인턴십
- 스택
- 크루스칼
- BFS
- 2020 KAKAO BLIND RECRUITMENT
- 2019 KAKAO BLIND RECRUITMENT
- 우선순위큐
- 다익스트라
- 백준
- GIT
- 조합
- 로봇 청소기
- 프로그래머스
- Spring
- 2021 KAKAO BLIND RECRUITMENT
- 플로이드 와샬
- 브루트포스
- 시뮬레이션
- SWEA
- 플로이드와샬
- 비트마스킹
- 구현
- 2018 KAKAO BLIND RECRUITMENT
- 이분탐색
- 최소 신장 트리
- 투포인터
- Today
- Total
목sssssss록크루스칼 (5)
개발조아
문제 링크 : https://www.acmicpc.net/problem/20010 20010번: 악덕 영주 혜유 FT온라인 게임에서 치열한 경쟁을 통해 영주가 된 혜유는 퀘스트를 받았다. 퀘스트의 내용은 자신이 관리하고 있는 마을 사이에 교역로를 건설하여 마을 간 교류를 활성화시키는 것이다. 이때, www.acmicpc.net MST와 DFS로 풀이 했다. 첫번째 답은 모든 마을을 연결하는 최소 비용을 출력해야하므로 MST 로 구한다. 두번째 답은 마을과 마을 사이의 최단 경로 중 비용이 가장큰 경로 이므로 BFS나 다익스트라로 구하면 된다. MST는 크루스칼로 구현했다. MST를 구성하면서 BFS에서 사용할 그래프를 인접리스트로 저장했다. 인접리스트 중 길이가 1인 점에서만 BFS를 수행했다. 끝에서 ..
문제 링크 : https://www.acmicpc.net/problem/17472 17472번: 다리 만들기 2 첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다. 0은 바다, 1은 땅을 의미한다. www.acmicpc.net 예전에 풀었던 걸 MST로 다시 풀어봤다. 예전에는 BFS,DFS로 완탐으로 해결했었다. 이번에는 BFS, MST로 해결했다. BFS로 각 섬에 번호 매기면서 섬의 가장자리를 구한다. 이때 해당 점에서 이동하려는 점이 격자판 안에 있고 물인 경우 가장자리로 판별해서 저장했다. (x,y,방향) 이때 방향은 해당 칸으로 온 방향이다. 구한 가장자리에서 다리를 만들면..
문제 링크 : https://www.acmicpc.net/problem/1944 1944번: 복제 로봇 첫째 줄에 미로의 크기 N(4 ≤ N ≤ 50)과 열쇠의 개수 M(1 ≤ M ≤ 250) 이 공백을 사이에 두고 주어진다. 그리고 둘째 줄부터 N+1째 줄까지 미로의 정보가 주어진다. 미로는 1과 0, 그리고 S와 K로 주어 www.acmicpc.net 접근법이 떠오르지 않아 밑에 알고리즘 분류를 보고 해결한 문제이다. MST로 해결하였다. 출발점과 모든 열쇠점을 연결하는데 이때 가중치가 최소가 되어야한다. 그러므로 MST로 해결하면 된다. 이때 주어진 미로를 그래프로 변환해야한다. 이것은 각 지점별로 다른 지점까지 최단경로를 계산해서 만들어주면 된다. 그래서 나는 미로를 좀 수정했다. S를 1로, K..
문제 링크 : https://www.acmicpc.net/problem/1647 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net MST 문제이다. 나는 크루스칼로 풀이 했다. 문제는 마을을 두개로 분리하고 두부분의 가중치의 합이 최소가 되어야한다. 정점을 n이라 했을 때 n-2개의 간선은 고르면 된다. MST 문제를 풀때 n-1개의 간선을 고르면 된다. n-1개를 고르면 하나의 그래프가 탄생하고 사이클이 형성되지 않은 상태이다. 이때 간선을 하나 지우면 두개의 그래프가 나..
문제 링크 : https://www.acmicpc.net/problem/1922 1922번: 네트워크 연결 이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다. www.acmicpc.net MST 문제이다. 다른 변형 없이 크루스칼 알고리즘으로 풀면 된다. 이때 사이클 체크는 유니온-파인드 알고리즘으로 해결하면 된다. 이때 파인드 과정에 경로 압축을 수행하자. from sys import stdin input = stdin.readline n = int(input()) m = int(input()) edges = [tuple(map(int, input().split())) for _ in range(m)] edges.sort(key=lambda x:x[2])..