336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

원이 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.... 소수점 자료형을 쓰지 않아도 문제를 풀 수가 있다. 

%5Csqrt%20%7B%20%5Ccombi%20%5E%7B%202%20%7D%7B%20(x2-x1)%20%7D%2B%5Ccombi%20%5E%7B%202%20%7D%7B%20(y2-y1)%20%7D%20%7D%3Ddist%5C%5C%20%5Ccombi%20%5E%7B%202%20%7D%7B%20(x2-x1)%20%7D%2B%5Ccombi%20%5E%7B%202%20%7D%7B%20(y2-y1)%20%7D%3D%5Ccombi%20%5E%7B%202%20%7D%7B%20dist%20%7D%5C%5C%20dist%5Cto%20%5Ccombi%20%5E%7B%202%20%7D%7B%20dist%20%7D%5C%5C%20r1%2Br2%5Cto%20%5Ccombi%20%5E%7B%202%20%7D%7B%20(r1%2Br2)%20%7D%5C%5C%20(%5Ccombi%20%5E%7B%202%20%7D%7B%20dist%20%7D%3C%5Ccombi%20%5E%7B%202%20%7D%7B%20(r1%2Br2)%20%7D)%20 

원 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

+ Recent posts