cws0173   4년 전

1037번 문제에서 해답은 가장 큰 약수와 가장 작은 약수를 곱하는 것임을 생각하고

아래의 코드에서 주어진 입력중 가장 큰 값과 가장 작은 값만 구한 뒤 두 값을 곱해주었습니다.

그런데 틀렸습니다. 라는 결과가 나왔습니다.


그래서 다른 질문들을 참조하여 새로운 코드를 짰습니다.

새로운 코드에서 주어진 입력을 다 배열에 저장한 뒤 정렬 후 제일 작은 값과 제일 큰 값을 곱했더니 맞았습니다.

왜 이런 차이가 나는지 궁금합니다.

N = 1 일때, 즉 진짜 약수가 1개 일때 결과는 (진짜 약수)^2로 잘 나옵니다.

또한 진짜 약수의 범위가 2이상 1,000,000 이하이므로

max = 0, min = 2^31-1 로 설정한것이 타당하다고 생각합니다.

결과 값 또한 32비트 부호있는 정수로 표현이 가능하므로 result를 int 자료형으로 설정한 것도 타당하다고 생각합니다.

windflower   4년 전

2^31-1

이게 정말 2,147,483,647일까요?

cws0173   4년 전

아 그렇네요ㅠㅜㅠㅜ

죄송합니다ㅠㅜ

XOR 연산자였네요...

친절한 답변 감사드려요!

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