접근
이전의 선분 교차 1번 문제와 유사하지만 몇가지 조건이 추가되어 훨씬 어려워졌다..
선분 교차 1번 문제: 2021.05.06 - [코딩/백준 (Python)] - 백준 17386번: 선분 교차 1 (Python)
선분 교차 1번 문제에 추가하여 이 문제에서는 세개의 선이 한 직선 위에 있을 수 있다. 따라서 한 선분의 끝점이 다른 선분의 중간에 있을 수도 있고, 다른 선분의 끝점이 될 수도 있다. 더하여 두개의 선분이 한개의 직선 위에 있을 수도 있다.
조건을 따지는 것이 굉장히 까다롭지만 잘 생각해보면 아래와 같은 조건을 얻을 수 있다.
코드
import sys
x1, y1, x2, y2 = map(int, sys.stdin.readline().split())
x3, y3, x4, y4 = map(int, sys.stdin.readline().split())
def ccw(x1, y1, x2, y2, x3, y3):
tmp = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1)
if tmp > 0:
return 1
elif tmp < 0:
return -1
else:
return 0
ans = 0
if ccw(x1, y1, x2, y2, x3, y3) * ccw(x1, y1, x2, y2, x4, y4) == 0 and ccw(x3, y3, x4, y4, x1, y1) * ccw(x3, y3, x4, y4, x2, y2) == 0:
if min(x1, x2) <= max(x3, x4) and max(x1, x2) >= min(x3, x4) and min(y1, y2) <= max(y3, y4) and min(y3, y4) <= max(y1, y2):
ans = 1
elif ccw(x1, y1, x2, y2, x3, y3) * ccw(x1, y1, x2, y2, x4, y4) <= 0 and ccw(x3, y3, x4, y4, x1, y1) * ccw(x3, y3, x4, y4, x2, y2) <= 0:
ans = 1
print(ans)
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 2162번: 선분 그룹 (Python, PyPy3) (0) | 2021.05.07 |
---|---|
백준 20149번: 선분 교차 3 (Python) (0) | 2021.05.07 |
백준 17386번: 선분 교차 1 (Python) (0) | 2021.05.06 |
백준 11758번: CCW (Python) (0) | 2021.05.06 |
백준 2166번: 다각형의 면적 (Python) (2) | 2021.05.05 |
최근댓글