주어진 좌표의 범위를 고려하면
ccw를 계산하다 오버플로우가 나는 것 같습니다
1708번 - 볼록 껍질
ntopia님 상세한 설명 감사합니다.
아래 리턴값 뿐만 아니라 x,y 좌표들도 전부 long 값으로 바꾸었습니다만, 틀렸다고 나오네요....위 소스 Long로 수정했어요...
틀린케이스를 알고 싶습니다...흑흑..
물론 아시겠지만..
int 최대값 : 2147483647
long 최대값 : 9223372036854775807
public static long ccw(point p1, point p2, point p3) { return p1.x*p2.y+p2.x*p3.y+p3.x*p1.y-p2.x*p1.y-p3.x*p2.y-p1.x*p3.y; }
댓글을 작성하려면 로그인해야 합니다.
naegeora 7년 전 1
아래 로직에 따라서 작성했는데 틀렸다고 나오네요....한 4시간동안 버그잡으려고 하는데 안잡혀서...
거의 다 한것 같은데 안되서..고수님들의 고견을 부탁합니다.
1.가장작은 y좌표,x좌표 를 기준점으로 각도순으로 정렬함. [cosine값을 내림차순 정렬함]
2. 정렬된 점들을 따라가며 연속된 세점들(P[i],P[i+1],P[i+2])에 대해 ccw이면 que에 P[i+2]를 넣고,
아니면 P[i+1]을 que에서 빼고 que에서 first/second 유지하고 P[i+2]를 다시 ccw
3. 위과정을 N 까지 돌리고 P[0]를 넣어서 CCW를 돌려서 P[N-1]을 점검함.