Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @Builder
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
Archives
- Today
- Total
기록
백준_17387_선분 교차2 본문
문제
https://www.acmicpc.net/problem/17387
풀이
1) CCW
세 점의 방향성을 판별할 수 있다.
2) 두 선분이 교차
3) 두 선분이 일직선
코드
import sys
input = sys.stdin.readline
x1, y1, x2, y2 = map(int, input().strip().split())
x3, y3, x4, y4 = map(int, input().strip().split())
A, B, C, D = (x1, y1), (x2, y2), (x3, y3), (x4, y4)
A, B = sorted([A, B])
C, D = sorted([C, D])
def distance(N1, N2) :
(x1, y1), (x2, y2) = N1, N2
return (x1-x2)**2 + (y1-y2)**2
def CCW(N1, N2, N3) :
(x1, y1), (x2, y2), (x3, y3) = N1, N2, N3
return (x2-x1)*(y3-y1) - (y2-y1)*(x3-x1)
CCW_ABC = CCW(A, B, C)
CCW_ABD = CCW(A, B, D)
CCW_CDA = CCW(C, D, A)
CCW_CDB = CCW(C, D, B)
def solution() :
# type1
if A==C or B==D : return 1
if A==D or B==C : return 1
# type2
if CCW_ABC*CCW_ABD==0 and CCW_CDA*CCW_CDB<0 : return 1
if CCW_ABC*CCW_ABD<0 and CCW_CDA*CCW_CDB==0 : return 1
# type3
if CCW_ABC*CCW_ABD<0 and CCW_CDA*CCW_CDB<0 : return 1
# type4
if CCW_ABC==0 and CCW_ABD==0 and CCW_CDA==0 and CCW_CDB==0 :
if A<C and distance(A, B) > distance(A, C) : return 1
if A>C and distance(C, D) > distance(C, A) : return 1
return 0
print(solution())
참고자료
'코딩테스트 > python' 카테고리의 다른 글
백준_2169_로봇 조종하기 (0) | 2022.03.22 |
---|---|
백준_4386_별자리 만들기 (0) | 2022.03.17 |
백준_2239_스도쿠 (0) | 2022.03.07 |
백준_1644_소수의 연속합 (0) | 2022.03.04 |
프로그래머스_python_괄호변환 (0) | 2022.02.28 |
Comments