상세 컨텐츠

본문 제목

CCW

코딩테스트/기타

by 수타. 2023. 9. 17. 14:51

본문

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

 

11758번: CCW

첫째 줄에 P1의 (x1, y1), 둘째 줄에 P2의 (x2, y2), 셋째 줄에 P3의 (x3, y3)가 주어진다. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) 모든 좌표는 정수이다. P1, P2, P3의 좌표는 서로 다르다.

www.acmicpc.net

문제요약:

세점이 주저지고 이를 이을 때, 시계방향인지 반시계방향인지  판단하라

 

소요시간:

20분

 

난이도:

골드 5

 

제출횟수:

2회

 

1차코딩:

x1,y1 = map(int,input().split())
x2,y2 = map(int,input().split())
x3,y3 = map(int,input().split())

piv = ((y2-y1)/(x2-x1))*(x3-x1) +y1-y3
print(-1 if piv>0 else 1 if piv<0 else 0)

처음에는 직선의 방정식을 이용해서 구현하려 했지만, 기울기를 구하는 과정에서 zero/divsion 문제가 발생했고, 이를 해결하기위해 예외처리를 하다보니 코드가 간결하지 못하고 가독성이 떨어졌습니다. 그래서 참고하여 새로 만든 코드가 다음과 같습니다.

 

2차코딩:

x1,y1 = map(int,input().split())
x2,y2 = map(int,input().split())
x3,y3 = map(int,input().split())

vx1,vy1 = x2-x1,y2-y1
vx2,vy2 = x3-x2,y3-y2

piv = vx2*vy1 - vx1*vy2
print(-1 if piv >0 else 1 if piv !=0 else 0)

다음은 외적을 이용한 풀이이며, z값이 0이기 때문에 공식중 다음만 남게되고, 훨씬 깔끔하게 풀 수 있었습니다.

'코딩테스트 > 기타' 카테고리의 다른 글

단어수학  (0) 2023.10.24
바람개비 구현  (0) 2023.09.19
신규 아이디 추천  (0) 2023.07.20
안전지대  (2) 2023.07.19

관련글 더보기