본문 바로가기

PS/백준

[BOJ] 백준 2162 선분 그룹 (Swift)

반응형

문제

https://www.acmicpc.net/problem/2162

 

2162번: 선분 그룹

첫째 줄에 N(1 ≤ N ≤ 3,000)이 주어진다. 둘째 줄부터 N+1번째 줄에는 양 끝점의 좌표가 x1, y1, x2, y2의 순서로 주어진다. 각 좌표의 절댓값은 5,000을 넘지 않으며, 입력되는 좌표 사이에는 빈칸이 하

www.acmicpc.net

풀이

CCW를 사용해 선분이 교차되는지 확인하고, 유니온 파인드를 사용해 풀 수 있는 문제입니다.

입력받은 모든 선분들에 대해 교차하는지 확인을 해주어야 합니다.
교차한다면 union 연산을 실행하여 같은 부모로 넣어줍시다.
저는 숫자가 더 작은 번호가 부모로 넣어주었습니다.

모든 선분들에 대해 확인했다면, 다시 한번 find 연산을 해 최대 부모? 의 번호로 갱신시켜줍시다.

그 이후 부모의 번호가 다른 것들의 갯수를 출력해주면, 그룹의 수가 나올 것입니다.
그룹에 속한 선분의 갯수를 구하는 방법으로는 그룹번호가 key, 그룹번호가 나온 빈도수를 value인 딕셔너리를 선언하여
가장 큰 값이 가장 크기가 큰 그룹에 속한 선분의 갯수입니다.

소스코드

후기

CCW유니온 파인드를 합쳐서 풀이할 수 있는 문제였습니다.
이런 문제는 처음 접해봐서 재밌게 풀었습니다.

반응형