실험실
  • [백준] 17387. 선분 교차 2 - 파이썬
    2024년 11월 05일 18시 47분 44초에 업로드 된 글입니다.
    작성자: B1NK
    728x90
    • 백준 링크: 17387번: 선분 교차 2
    • solved.ac 난이도: 골드 II
    • 시간 제한: 0.25 초 (추가 시간 없음)
    • 메모리 제한: 512 MB

    문제

    2차원 좌표 평면 위의 두 선분 L1, L2가 주어졌을 때, 두 선분이 교차하는지 아닌지 구해보자. 한 선분의 끝 점이 다른 선분이나 끝 점 위에 있는 것도 교차하는 것이다.

    입력

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

    출력

    L1과 L2가 교차하면 1, 아니면 0을 출력한다.

    코드

    import sys
    input = sys.stdin.readline
    
    
    def solution():
        ccw123 = ccw(x1, y1, x2, y2, x3, y3)
        ccw124 = ccw(x1, y1, x2, y2, x4, y4)
        ccw341 = ccw(x3, y3, x4, y4, x1, y1)
        ccw342 = ccw(x3, y3, x4, y4, x2, y2)
    
        if ccw123*ccw124 == 0 and ccw341*ccw342 == 0:
            if mx1 <= mx4 and mx3 <= mx2 and my1 <= my4 and my3 <= my2:
                return 1
        else:
    
            if ccw123*ccw124 <= 0 and ccw341*ccw342 <= 0:
                return 1
    
        return 0
    
    
    def ccw(x1, y1, x2, y2, x3, y3):
        return (x2-x1)*(y3-y1) - (y2-y1)*(x3-x1)
    
    
    if __name__ == '__main__':
        x1, y1, x2, y2 = list(map(int, input().split()))
        x3, y3, x4, y4 = list(map(int, input().split()))
    
        mx1, my1, mx2, my2 = min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)
        mx3, my3, mx4, my4 = min(x3, x4), min(y3, y4), max(x3, x4), max(y3, y4)
    
        print(solution())
    728x90
    댓글