ahj1592   4년 전

An을 구하는 로직은

n이 짝수일때, An/2An/2

n이 홀수일때, A(n-1)/2A(n-1)/2 *A 로 나누어서 풀었습니다

행렬곱셈함수MatMtp()를 호출할때마다 C를 동적할당하여 풀었습니다

어느부분이 메모리초과에 기여(?) 하는지 잘 몰라서 질문드립니다


* 사실 시간초과도 나올것같은데 메모리초과 메시지가 먼저 나와 시간초과인지는 확실하지 않습니다

pichulia   4년 전

free 라는 함수를 아십니까

ahj1592   4년 전

(66번째줄은 주석처리하였습니다)

죄송하지만 free함수를 어디서 사용해야할지 모르겠습니다

main에서 행렬 M 을 다 출력하고나서 A를 free 해보았지만 소용이없습니다ㅠㅠ

pichulia   4년 전

MatMtp 함수 내부에서 메모리를 할당한 C라는 녀석을 free해야합니다.

근데 이 친구가MatN 내부에서 사용되기 때문에 함부로 free를 할 수가 없는 골때리는 상황이군요ㅋㅋㅋ 어떻게 해결해야할지 고민해봅시다.ㅋㅋ

해결 방법이 여러가지 있겠지만...저였다면 일단 34번째 줄에 대해선 R=A가 아니라 R에 malloc을 해서 A의 값을 복사했을 것입니다.

pichulia   4년 전

그리고 이건 저도 지금 제출해봐서 알았는데... n(소문자 n)의 값의 범위가 int범위를 넘어가기 때문에 long long int를 사용해야합니다. ㅠㅠ

ahj1592   4년 전

그냥 함수를 새로 만들어서 풀었습니다

원래대로하면 함수호출이 많아져서 메모리초과가 나는것같더군요

1) 행렬2개곱하는함수 

2) 행렬을 제곱하는함수

이렇게 만들어서

n이 짝수 -> An/2를 제곱

n이홀수 -> A * An-1 곱하기

이렇게 하니까 해결했습니다


그리고 n이 long long 인것도 감사합니다!!!

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