moonsoo5522   7년 전

가독성 고려해서 cmp, gcd함수는 뺐습니다.

우선 배열의 값들을 모두 내림차순으로 정렬한 후, arr[0]값을 res변수에 저장하고,

arr[1]부터 res변수와 비교해서 gcd를 구하는 방식으로 풀어나갔습니다. ( res가 arr[i]의 배수인 경우에는 최소공배수가 res보다 높아지지 않고, 최대공약수는 arr[i] 그대로일 것이기 때문에 continue로 점프했습니다. )

최소공배수, 최대공약수를 구해서 재사용하는 것이다보니, 최소공배수 연산을 하면 할수록 res값이 줄어드는 경우는 없다고 판단해서 따로 max변수를 선언하지는 않았습니다.

(사실 이 최대값이 mod를 하기 전 기준의 최대값을 원하는건지 mod를 한 후 기준의 최대값을 원하는건지도 모르겠네요..ㅠㅠ)

질문 검색해서 뭐가 문제인지 알아보려 했는데... 질답글을 보면 볼수록 더 아리송합니당..

일단 문제 조건도 정확하게 이해하지 못한 것 같고, 더 삽질해봐야 의미 없을거같아서 도움 요청해봅니다...

zlzmsrhak   7년 전

res가 10억 7로 나눈 나머지를 저장하고 있기 때문에 최대공약수, 최소공배수를 제대로 구할 수 없습니다.

예를 들어 5로 나눈 나머지를 저장하고 있다고 하면,

gcd(6, 2) = 2, gcd(6%5, 2) = 1

moonsoo5522   7년 전

저도 질문검색에서 그부분을 보고 한번 생각해봤는데 해결방법이 잘 떠오르지 않네요.

gcd 연산하는 부분에서 충분히 작은 최대공약수가 나왔다 생각하고, 연산 과정(for루프 내)에서는 모드를 아예 빼고나서 최종결과 출력에서만 모드연산 적용해봐도 오답

혹시나해서 lcm구하는 과정에 (res*arr[i])mod10억7... 해봐도 오답이네요..

zlzmsrhak   7년 전

소인수분해를 응용하면 해결방법을 찾으실 수 있을 것 같습니다.

moonsoo5522   7년 전

넵 감사합니당 ㅎㅎ

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