원이 A, B가 있을 때
경우 1) 원이 접하거나, 겹치는 경우에는 한 그룹이라고 본다.
경우 2) 원이 접하지않고, 겹치는 경우는 두 그룹이라고 본다.
하지만 원이 A, B, C 가 있으며, A 와 C 를 서로 맞닿아있는 B가 있는 경우 A, B, C 는 한 그룹으로 본다.
이때 입력에 대해 그룹 수를 구하는 것이 이 문제 요약이다.
일단 이 문제 분류가.. DFS/BFS 이어서 풀어보려 했는데 왜 생각을 해봐도 DFS BFS로 생각이 안나는지..
그래서 Union Find로 풀었다.
맞닿아 있는 경우에는 경우 1이기때문에 루트를 합쳐준다.
맞닿아 있지 않은 경우2는 그냥 냅둔다.
그리고 무조건 (x, y, r) = (x좌표, y좌표, 반지름) 이고, 이 모든 입력은 정수로 주어지기 때문에 굳이 double.... 소수점 자료형을 쓰지 않아도 문제를 풀 수가 있다.
원 A, B 거리를 루트를 씌우지 않은 값과 원A, B의 반지름을 더하고, 제곱한 값을 비교해주면 정수만 나오기 때문에 연산시간을 줄일 수 있다.
03:35-03:54
DFS 로 좀 더 생각하니 풀리긴 했는데, 처음에 시간 초과할 것 같아서 이렇게 짜면 안될 것 같다고 생각했는데 1.5초 정도 걸렸다. union-find로 풀었을 때는 0.7초 정도 걸렸다.
우선, DFS 로 풀이하는 방법은 원의 집합 루트가 정해져 있지 않은 경우, root를 지정한다.
root 가 지정되어 있다면 DFS를 하지 않는다.
root 가 지정되어 있지않다면 DFS를 한다.
가지치기 + 완전탐색
'PSNote > Problem Solving' 카테고리의 다른 글
[BOJ-2042]구간 합 구하기 1 (0) | 2017.07.17 |
---|---|
[ALGOSPOT]LIS (0) | 2017.07.17 |
[BOJ-1707]이분그래프 (0) | 2017.07.17 |
[BOJ-2231]분해합 (0) | 2017.07.17 |
[BOJ-12852]1로만들기2 (0) | 2017.07.17 |