ckwogus37   3년 전

사실 처음에는 int형으로 선언하고 제출하니 계속 틀렸다고 나왔습니다.

그래서 변수들을 선언할 때 double형으로 해 주었는데 바로 맞다고 나왔습니다.

그래서 왜 그런지 생각하다가 double형의 영향을 받는 곳이 

51번 줄의 sqrt를 이용하여 두 터렛사이의 거리를 구하는 부분 이였습니다.


하지만 문제에서는 모든 값이 정수(혹은 자연수)로 나오기에 

만약 int형으로 변수를 선언했다 하더라도

좌표의 위치도 정수고, 좌표로부터의 거리도 정수(자연수)라서 

실수에서 정수로 변환되며 생기는 차이값이 존재하지 않을것이라 생각이 듭니다...

그렇다면  double형으로 바꾸어 줌으로써 어떤부분이 해결되는 건지 알려주시면 감사하겠습니다.

jkh9615   3년 전

sqrt 함수의 인풋은 다양한 자료형으로 오버로딩이 돼있고

반환형 자체가 double로 알고있어요. (자바 기준)

그래서 sqrt(2) 를 하게되면 double형으로 1.41~~~이 나오구요.

그래서 d변수에 넣을 때 int로 넣어도 반환은 double로 되는데, 질문자님께서 애초에 d변수를 int형으로 선언하셨다면 캐스팅에 의해 실수부분이 버려졌을거라 생각해요.

정확하게 보시려면 해당 코드 IDE에서 실행하시고

d변수를 int형으로 선언하신 뒤 printf, double로 선언하신 뒤 printf를 해보시는게 제일 정확하지 않을까 싶어요.

jkh9615   3년 전

앗, 오타가 있네요.

4번째 줄 int로 넣어도 -> int로 선언해도

실수부분이 버려졌다 -> 소수점이 버려졌다.

ckwogus37   3년 전

답변 감사합니다!

우선 다시 생각해 보니 두 터렛 사이의 거리 d가 소수점 부분이 나올 수 있었습니다!

그래서 double형의 소수점부분까지 다 받은 뒤 비교가 시작되야 되는데 int형으로 받아서 소수점부분이 없어지니

반례가 있었을 것 같습니다! 덕분에 잘 해결했습니다! 감사합니다
 

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