작성일 : 11-07-11 21:54
2008년도 정올 전국대회 초등부 3번문제
 글쓴이 : 컴스쿨(hancomedu)
조회 : 7,863  

0.34초는 시간초과가 아닙니다.
오류가 뜨는 것은 대체로 참조하는 메모리가 범위를 벗어난 경우에 해당됩니다.
님의 코드에서는 for문에서 j는 i+1부터 시작하면 되는데 1부터 시작하니 d가 음수가 나오는 경우가 발생하여  메모리 범위를 벗어나게 되고 실행에러가 나는 것입니다.

전체적으로 강의의 내용을 잘 이해하고 충실하게 반영한 매우 훌륭한 프로그램입니다.
만약 초등학생인데 다른 도움없이 강의만 듣고 작성했다면 대단한 재능을 가진 학생인것 같습니다.

여기에서 소스를 분석하거나 수정하여 제공하지는 않지만 워낙 열심히 하는 것 같아 위의 소스를 보다 단순하게 수정해 보았습니다.
특히 함수를 작성할 때는 if문을 최대한 줄이고 리턴 조건을 먼저 처리한 후에 코딩을 하면 전체적으로 무척 깔끔해 지고 에러율도 줄일수 있으며 잘못된 부분을 찾아내기도 훨씬 용이합니다.
코딩을 단순하게 하는 훈련만 조금 하시면 앞으로 상당한 발전이 기대됩니다.

#include <stdio.h>
int aa[3010][3010];
int a[1000010];
int n;
int in[3010];
int max=0;
int t(int i, int j) {
 int d=j-i;
 if(i-d<=0 || a[i-d]==0) return 0;
 if(aa[a[i-d]][a[i]]>0) return aa[a[i-d]][a[i]]+j;
 return i-d+i+j;
}

int main() {
 int i,j;
 FILE*fin = fopen("INPUT.TXT","r");
 fscanf(fin,"%d",&n);
 for( i=1;i<=n;i++) {
  fscanf(fin,"%d",&in[i]);
 }
 fclose(fin);
 for( i=1;i<=n;i++) {
  a[in[i]]=i;
 }
 for( i=1;i<n;i++) {
  for( j=i+1;j<=n;j++) {
   aa[i][j]=t(in[i],in[j]);
   if(aa[i][j]>max) max=aa[i][j];
  }
 }
 FILE*fout = fopen("OUTPUT.TXT","w");
 fprintf(fout, "%d", max);
 fclose(fout);
 return 0;
}


황희선 11-07-11 22:34
 
아... 선생님 정말 감사합니다~^^(정올이 5일남아 절실합니다 ㅠㅠ)
제가 등차수열의 공차가 양수일때만 다룬다는 것을 생각을 못했네요.
그렇다면 시간초과의 기준은 얼마정도인지 알고 싶습니다.
또한, 정올 채점용 컴퓨터의 사양이 jungol사이트의 사양보다 뛰어나다고 하셨는데,
그렇다면, 제가 제출한 코드를 제출한다 해도 0.3초 안에 들 수 있을까요?

코드 길이가 2배정도나 줄은 것 같아요 ㅎ;;

네! 잘 알겠습니다~^^
정올때 뵐 수 있으면 좋겠네요;;
 
 

Total 635
번호 제   목 글쓴이 날짜 조회
55 올림피아드 강의 교재는 별도로 없는건지용~ (1) 한지민 08-27 8387
54 엑셀 완전초짜인데요 차트 만들기요..질문 (1) 정동명 08-25 8492
53 알고리즘 강좌 수강하고자 합니다. (1) 박수현 08-22 8830
52 알고리즘 강좌 신청합니다 (1) 이재성 07-13 7102
51 알고리즘 강의신청이요 (1) 김선미 07-13 6803
50 기하 알고리즘 강좌 질문 있습니다. (2) 황희선 07-11 7799
49 2008년도 정올 전국대회 초등부 3번문제 (1) 황희선 07-11 8092
48    2008년도 정올 전국대회 초등부 3번문제 (1) 컴스쿨 07-11 7864
47 2008년도 정올 전국대회 초등부 2번/중등부 1번 기출문제 (1) 황희선 07-10 7190
46    2008년도 정올 전국대회 초등부 2번/중등부 1번 기출문제 (4) 컴스쿨 07-11 10088
45 알고리즘 강의신청합니다~^^ (1) 황희선 07-10 6703
44 알고리즘 강의신청이요 (1) 김선미 07-08 6724
43 알고리즘 강의 신청 (1) 최현민 07-05 6691
42 교육신청과목어디서찾나요 (1) 안병태 06-29 6754
41 동영상 재생 (7) 김태경 06-28 6899
40 2006 전국 본선 1번 문제 (3) 금은실 06-27 7048
39 알고리듬 강의 신청 (1) 문일준 06-20 6858
38 알고리즘 강의 신처 (1) 이여진 06-15 7138
37 미디어 연결중 (2) 이수정 05-20 7585
36 Dyamic(동전 바꿔주기) (1) 김현수 05-19 13156
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30    

회사소개 | 개인정보처리방침 | 이용약관 | 찾아오시는 길 | 이메일주소 무단수집거부 | 사업자정보확인
경기도 안양시 동안구 호계동 1065-10 협성골드프라자 601호 한컴에듀케이션(주) TEL : 031-388-8840 FAX : 031-388-0996
대표자 : 김동규 사업자번호 : 130-86-02870 통신판매업신고번호 : 제 2010-경기안양-888호
COPYTIGHT(C) 한컴에듀케이션(주), ALL RIGHT RESERVED.
담은강좌 : 0