티스토리 뷰

1. 문제

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

 

2. 풀이

  • 세 점 P1, P2, P3가 주어졌을 때, 이들을 순서대로 이은 선분이 어떤 방향을 이루는지 판단하는 문제다.
  • 외적(벡터의 곱)으로 접근했다.
  • 두 벡터의 외적은 걔네들이 이루는 평행사변형의 넓이를 나타내는데, 외적의 부호가 방향을 알려준다는 점을 활용했다.
  • 공식도출: 외적 = (x2-x1) × (y3-y1) - (y2-y1) × (x3-x1)
  • 판단기준
    • 외적 > 0: 반시계방향 -> 1
    • 외적 < 0: 시계방향 -> -1
    • 외적 = 0: 일직선 -> 0
    • P3가 P1에서 P2로 가는 벡터의 왼쪽에 있으면 반시계, 오른쪽에 있으면 시계방향?
def ccw(p1, p2, p3):
    x1, y1 = p1
    x2, y2 = p2
    x3, y3 = p3
    
    # 여기서 외적 계싼
    cross_product = (x2-x1) * (y3-y1) - (y2-y1) * (x3-x1)
    
    if cross_product > 0: 
    	return 1 # 반시계방향
    elif cross_product < 0: 
    	return -1 # 시계방향
    else: 
    	return 0 # 일직선
        
p1 = tuple(map(int, input().split()))
p2 = tuple(map(int, input().split()))
p3 = tuple(map(int, input().split()))

result = ccw(p1, p2, p3)
print(result)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
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
글 보관함