1064번 - 평행사변형
간단한 기하문제라고 생각해서 도전했는데, 큰 낭패를 보고 있네요 ㅠㅠ 어디가 문제인지 잘 모르겠습니다...
평행사변형을 만들 수 있는 경우와 없는 경우를 계산하여, 둘레를 계산해서 그걸 결과값으로 내놓은 건데...
처음부터 제가 생각을 잘못한 거라 생각하고 다시 도전을 하겠는데... 64%, 73%에서 틀리니 뭐 도저히 생각이 안 나더군요.
처음에는 계산 과정 중 부동소수 오차가 발생했을 것이라 판단하고 마지막 부분에 오차를 보정해주었는데,
두 번째부터는 어디서 오류가 나는지 잘 모르겠네요..
도대체 무슨 오류인가 궁금합니다.. 아시는 분은 댓글 좀 부탁드립니다!
제출 언어는 C++11이고 필요한 부분에는 주석을 달아놓았으니, 문제 해결되면 소스코드는 지워두도록 하겠습니다 ㅠㅠ
p.s. 이 문제 도전하실 때, 부동소수점 연산과 실수 INF에 주의하세요!
저도 비슷하게 60퍼대에서 틀리는데 좀만더 설명해주실수있을까요?
어떤걸 주의하라는지 잘 감이 안옵니다 ㅠㅠ
일단 처음에 3점을 x로 정렬을 하고 x축으로 일자거나 y축으로 일자를 확인합니다.
그리고 기울기를 조사하는데 분모가 0이면 안만들어요 그렇게 내려가서 else문으로
3점으로 3변이 만들어지는데 거기서 2변을 선택해서 *2를합니다. 그러면 둘레가 나오기때문에 거기서 최댓값하고 최솟값을 구해서 빼는식으로 구현했습니다.
제가 기억하기론 60%대에서 틀린 이유가 부동소수점 오차 때문에 틀렸었고, 70%대는 아예 잘못된 비교를 해서 틀린 걸로 알고 있거든요..
한 번 최대값 - 최소값을 하실 때 뒤에 1e-10~1e-15 정도의 값을 더한 후 제출해보세요!
후아.. 안되네요 ㅠㅠㅠ
좀더 생각해봐야할거같아요 ㅠ
저는 딱 60% 들어가서 틀리네요..
부동소수점 오차인듯 한데 어떻게 잡는건지..ㅠㅠ (max-min)+(1e-10) 해봤지만 그래도 틀리네요..
어떤 방식으로 접근했는지 알 수 있을까요?
1단계에서 3개의 점의 x축이 모두 같거나 y축이 모두 같다면 -1을 출력하고 종료합니다
그게 아니라면
받은 세개의 점을 각각을 이은 길이를 구하고
AB가 대각선일때, AC가 대각선일때, BC가 대각선일때 이렇게 3개를 가정해 둘레를 3개구했습니다.
그리고 그 3개의 둘레중 가장 큰값에서 가장 작은값을 빼서 출력했습니다.
C언어 사용해서 double형식으로 했습니다 ㅠㅠ..
댓글을 작성하려면 로그인해야 합니다.
gallopsys 6년 전
간단한 기하문제라고 생각해서 도전했는데, 큰 낭패를 보고 있네요 ㅠㅠ 어디가 문제인지 잘 모르겠습니다...
평행사변형을 만들 수 있는 경우와 없는 경우를 계산하여, 둘레를 계산해서 그걸 결과값으로 내놓은 건데...
처음부터 제가 생각을 잘못한 거라 생각하고 다시 도전을 하겠는데... 64%, 73%에서 틀리니 뭐 도저히 생각이 안 나더군요.
처음에는 계산 과정 중 부동소수 오차가 발생했을 것이라 판단하고 마지막 부분에 오차를 보정해주었는데,
두 번째부터는 어디서 오류가 나는지 잘 모르겠네요..
도대체 무슨 오류인가 궁금합니다.. 아시는 분은 댓글 좀 부탁드립니다!제출 언어는 C++11이고 필요한 부분에는 주석을 달아놓았으니, 문제 해결되면 소스코드는 지워두도록 하겠습니다 ㅠㅠp.s. 이 문제 도전하실 때, 부동소수점 연산과 실수 INF에 주의하세요!