union
-
BOJ) 바이러스 (2606, JAVA)알고리즘/백준 2020. 8. 24. 16:39
풀이 전형적인 find - union 문제라고 할 수 있겠다. n 대의 컴퓨터가 연결되어 있고, 연결 관계가 주어진다. (그래프) 연결된 컴퓨터들 중 하나만 바이러스 걸려도 연결된 컴퓨터 모두 바이러스가 걸린다. 1번 컴퓨터가 바이러스 걸렸을 때, 몇 대의 컴퓨터가 추가적으로 바이러스 걸리는지 구하는 문제다. 풀이는 간단했다. 우선 parents 배열, find, union 메소드를 만들어 줬다. 그리고 입력을 받으면서 따로 graph에 저장하지 않고, 바로 find -union을 해줬다. 이후, 2번 ~ n번까지 컴퓨터를 돌면서 parent를 찾아 1번의 parent와 같다면 답에 더해줬다. (union할 때, 더 큰수의 parent를 작은 수로 설정해서 아마 1번의 parents는 언제나 1일것이다...
-
BOJ) 연결 요소의 개수알고리즘/백준 2020. 6. 22. 01:47
연결 요소의 개수 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주�� www.acmicpc.net 풀이 최근에 이 문제랑 거의 유사한 문제를 풀었던 것 같다. 그래서 비교적 빠르게 풀 수 있었다. 우선, 노드의 갯수 N은 1000 이하기 때문에, int형 배열을 이용해도 메모리 제한에 문제가 없다고 판단했다. 또한, 간선의 갯수 M은 N×(N-1)/2 즉, 최대의 경우 499,500이라는 숫자가 나오기 때문에 따로 저장을 하지 않고 입력을 받는 즉시 로직을 수행하도록 설정했다...