C언어 제한시간 초과때문에 질문올립니다 ㅠㅠ
오미자
질문 제목 : 질문 내용 :
http://211.228.163.31/pool/koi_seqe1/koi_seqe1.php?pname=koi_seqe1
이 사이트에 있는 문제를 풀고있습니다.
정말 초보적인 실력으로 몇시간을 들여서 간신히 코딩을 했는데,
저기서 채점을할때 맨마지막에 100000, 30000 이런식의 무지막지한 숫자를 집어넣더라고요..#include stdio.h
int n,k,sum,max=-100;
int degree[100000];
int main()
{
int i,b;
scanf(%d %d, &n, &k );
for( i=0; in ; i++)
{
scanf( %d, °ree[i] );
}
for( i=0; in-(k-1) ; i++)
{
for( b=i; b=i+(k-1); b++)
{
sum = sum+degree[b];
}
if(max=sum)
max = sum;
sum=0;
}
printf(%d, max);
}
이게 제가 가진 최대한의 지식 한도내에서 짜본 코드인데요..
어떻게 해야 저 1초라는 제한시간내에 구동시킬수 있을지 (n이 10만, k가 3만 이런식으로 주어졌을경우)
또한 제가 봐도 좀 억지로 코드를 짠 부분이 있는것 같아서.. 조언좀 부탁드립니다 ㅠㅠ
-
SchokoHolic
x 3 6 4 9 7 4 3 9 y
여기서
a = x+3+6+4+9+7+4+3+9를 가지고 있을 때
b = 3+6+4+9+7+4+3+9+y을 계산할 필요는 없지요.
그냥 b = a - x + y
이런식으로 하시면 됩니다. 매번 k개씩 더할 필요가 없습니다. a만 저장해두면 다음 b를 구해서 다시 a로 써먹고 반복하면 되요.