ssh9199   2년 전

평행사변형 만들 수 없는 경우 예외처리 부분 로직을 다음과 같이 작성했습니다.

삼각형의 세 변 중 가장 긴 변의 길이는 나머지 두 변의 길이의 합보다 작아야 함. 즉 (가장 긴 변의 길이 >= 나머지 두 변의 길이의 합)의 경우 세 점이 일직선상에 있거나(==), 수학적으로 있을 수 없는 경우(>)이므로 -1을 반환.

그런데, 이렇게 푸니까 73%에서 틀리더군요.

이 부분만 기울기 같을때 -1 출력하도록 예외처리했더니 풀렸습니다.

처음 로직이 왜 틀렸는지 도저히 모르겠습니다. ㅠㅠ 도움 부탁드립니다.


// 마지막 답 출력 (가장 긴 변의 길이 - 가장 짧은 변의 길이) * 2 는 수식으로 간단하게 증명 가능합니다.

qvixnh22   2년 전

dist[0]+dist[1] - dist[2]의 과정에서 정밀도 관련 문제로 보입니다. 아주 작은 정밀도 차이로 정수연산에서 일직선상임을 보일 수 있었던 입력이 dist[0]+dist[1]-dist[2] <= 0.e10을 false를 반환하는 것으로 보입니다.

마지막 조건문을 정수연산으로 교체한 코드는 AC를 받습니다.

ssh9199   2년 전

@qvixnh22 답변 감사드립니다! 정수연산으로 교체했다는게 어떤의미인지 이해가 잘 안됩니다 ㅠㅜ

qvixnh22   2년 전

실수 연산에서 오차가 발생해 "세 점이 한 직선 위에 있다"를 기울기 연산으로 대체한 코드가 AC를 받았다는 뜻입니다.

ssh9199   2년 전

@qvixnh22 아하 그런 의미였군요.. 답변 정말 감사 드립니다!

댓글을 작성하려면 로그인해야 합니다.