본문 바로가기

PS/백준

[BOJ] 백준 20149 선분 교차 3 (Swift)

반응형

문제

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

 

20149번: 선분 교차 3

첫째 줄에 L1의 양 끝 점 x1, y1, x2, y2가, 둘째 줄에 L2의 양 끝 점 x3, y3, x4, y4가 주어진다.

www.acmicpc.net

풀이

https://dev-mandos.tistory.com/314

 

[BOJ] 백준 17387 선분 교차 2 (Swift)

문제 https://www.acmicpc.net/problem/17387 17387번: 선분 교차 2 첫째 줄에 L1의 양 끝 점 x1, y1, x2, y2가, 둘째 줄에 L2의 양 끝 점 x3, y3, x4, y4가 주어진다. www.acmicpc.net 풀이 https://dev-mandos.tistory.com/313 [BOJ] 백준

dev-mandos.tistory.com

이 문제에서 교점을 구하는 부분이 추가된 문제입니다.

먼저 교차하는지 확인을 해주고, 교차한다면 교점을 구해야합니다.
두 선분이 평행이라면, 교점이 무수히 많을수도 있고, 하나일 수도 있습니다.
하나인 경우는, 두 선분의 시작점과 끝 점이 만날 때 일 것입니다.

교점을 구하는 수식은 다음과 같습니다.
$(x, y) = (\frac{(x_1y_2-y_1x_2)(x_3-x_4)-(x_1-x_2)(x_3y_4-y_3x_4)}{(x_1-x_2)(y_3-y_4)-(y_1-y_2)(x_3-x_4)},\frac{(x_1y_2-y_1x_2)(y_3-y_4)-(y_1-y_2)(x_3y_4-y_3x_4)}{(x_1-x_2)(y_3-y_4)-(y_1-y_2)(x_3-x_4)})$

여기서 $(x_1-x_2)(y_3-y_4)-(y_1-y_2)(x_3-x_4) = 0$이라면 두 직선은 평행이거나 일치합니다.

따라서, 두 선분이 교차하는지 확인하고 두 선분이 평행이거나 일치한다면 두 선분의 시작점이 끝 점과 만나는 지 확인해줍시다.
시작점과 끝 점이 일치한다면, 둘 중 아무 좌표나 출력해주면 됩니다.

그냥 교차한다면 위의 식을 사용해서 좌표를 구해줍시다.

소스코드

후기

수학적인 지식이 있어야 풀 수 있었던 문제였습니다.
저도 몰라서.. 블로그 글을 참고하여 풀 수 있었습니다.

반응형