BOJ

백준(BOJ) 17386 선분 교차 1(Python)

juLeena 2022. 7. 9. 18:37

문제 내용

 

먼저 L1에서 L2의 두 점에 대해 CCW를 해본다. 그 때 두 점의 회전 방향이 같으면 두 선분은 교차하지 않지만, 두 점의 회전 방향이 다르면 두 선분이 교차하는 것이 아니라 CCW를 L2에서 L1의 두 점에 대해 해줘야한다. 그 때 두 점의 회전 방향이 같으면 두 선분은 교차하지 않는다.

 

코드는 다음과 같다.

 

 

 

x1,y1,x2,y2=map(int,input().split())
x3,y3,x4,y4=map(int,input().split())
a=(x3-x2)*(y2-y1)
b=(y3-y2)*(x2-x1)
c=(x4-x2)*(y2-y1)
d=(y4-y2)*(x2-x1)

k1=0
k2=0

if a>b:
    k1=-1
elif a<b:
    k1=1
if c>d:
    k2=-1
elif c<d:
    k2=1

if k1==k2:
    print(0)
else:
    k3=0
    k4=0
    e=(x1-x3)*(y4-y3)
    f=(y1-y3)*(x4-x3)
    g=(x2-x3)*(y4-y3)
    h=(y2-y3)*(x4-x3)
    if e>f:
        k3=-1
    elif e<f:
        k3=1 
    if g>h:
        k4=-1
    elif g<h:
        k4=1
    if k3==k4:
        print(0)
    else:
        print(1)

함수로 코드를 짰다면 훨씬 코드가 깔끔했겠지만, 귀찮아서 생략했다.