echooi6   3년 전

주어진 B, A의 최대값이 10^9이기에 처음부터 자료형을 Long으로 주고 시작하였습니다.
그러나 오답을 고치기 위한 과정에서
Long으로 정의한 a, b가 int로 바꾸었을 때 비로소 정답으로 인정되었습니다.
다른 부분은 수정하지 않았습니다!

int로 표현할 수 있는 수가 부족해 Long으로 바꿔줄 수 있다는 부분은 이해가 됐는데,
역으로(int -> Long) 바꾸는건 문제가 생길 수 있다고 생각해보지 않아 당황스럽습니다..
어떻게 이해해야 하는 부분인지 알려주시면 감사하겠습니다.

djm03178   3년 전

다른 부분을 수정하지 않았다고 생각하셨겠지만 분명히 수정하신 부분이 있습니다. 직접 이 코드를 (우선 G16953을 Main으로 바꾸고) int로 냈을 때와 long으로 냈을 때 둘 다 정답을 받았습니다.

echooi6   3년 전

제가 Long으로 변환한 소스코드인데 저는 오답으로 나와서..

혹시 Long 파싱부분이 이렇게 하는게 아닌가요!?

Long a = Long.parseLong(st.nextToken());
Long b = Long.parseLong(st.nextToken());

djm03178   3년 전

제목이 long이라고 되어있고 int 대용으로 쓴 것처럼 되어있어서 long으로 하신 줄 알았는데 Long을 쓰셨군요. long과 Long은 다릅니다.

Long으로 할 경우 b == a에서 문제가 생깁니다. Long은 primitive type이 아니라 일반 클래스이기 때문에 ==은 두 객체가 완전히 같은 객체인지를 보는 것이고 두 값이 같은지를 보는 연산이 아닙니다. 값이 같은지를 보려면 equals 메서드를 써야 합니다.

djm03178   3년 전

그리고 이런 경우를 위해서 제가 많은 분들께 당부를 드리는 게 있는데, 질문은 기본적으로 틀린 코드를 그대로 올려주시는 게 좋습니다. 맞은 코드를 먼저 올리고 틀린 코드와의 다른 점을 말로 설명하면 지금과 같이 불명확한 점이 자주 생깁니다.

echooi6   3년 전

이때까지 long이랑 Long이 다른지 모르고 있었네요ㅠㅠ 많이 배워갑니다..

당부해주신 점 앞으로는 더 신경쓰도록 하겠습니다 감사합니다!

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