cin, cout은 scanf, printf보다 훨씬 느립니다
scanf, printf를 써보시길....
그리고 그거 고쳐도 틀렸습니다가 나오는데
잘 찾아보시면 뭐가 틀린지 아실 수 있을것입니다...
1005번 - ACM Craft
cin, cout은 scanf, printf보다 훨씬 느립니다
scanf, printf를 써보시길....
그리고 그거 고쳐도 틀렸습니다가 나오는데
잘 찾아보시면 뭐가 틀린지 아실 수 있을것입니다...
댓글 감사합니다.
그런데 printf,scanf로 바꿔도 시간초과가 납니다....
cin,cout전부 다 바꾸셨나요???
소스 그대로 복사해서 cin,cout부분 전부다 scanf,printf로 바꾸니 시간초과가 아니라 런타임에러가 나오네요
참고로
이런 문제처럼 while로 여러 테스트케이스를 다 받아주는 문제는 전역변수로 선언해놓은 부분 초기화를 잘 해주셔야 합니다
이 문제에서 indegree배열의 경우 전역변수로 선언해 놓으셨는데 while안쪽에 indegree배열을 초기화 하는 부분이 없습니다
indegree배열을 초기화하지 않으면 어떻게 될까요...?
33퍼센트에서 계속 시간초과가 나와서 다시 코드를 더 줄였습니다.
다 scanf,printf로 바꿨는데도 33퍼센트에서 시간초과가 발생했네요...
그리고 전역변수는 선언하는 순간 0으로 초기화됩니다.
전역변수는 프로그램이 시작하면서 할당되어 프로그램이 끝날 때 까지 존재하는 변수입니다.
지금 while문으로 여러 테스트케이스를 돌려야하는 상황인데
테스트 케이스가 2개가 들어온다고 치면
첫번째 케이스는 indegree배열이 모두 0으로 초기화 된 상태라 아무 문제없이 돌아갑니다
그런데 전역변수로 선언한 indegree배열은 두번째로 while문을 돌때 자동으로 0으로 초기화되지 않습니다
디버깅 해보시면 잘 확인하실 수 있을듯...
위에 수정하신 코드
27째 줄에 memset(indegree,0,sizeof(indegree));를 추가해서
indegree배열을 0으로 초기화해주면 시간초과가 아니라 틀렸습니다가 나옵니다
제 생각에 지금코드에서 시간초과가 나는 이유는 그거 같습니다
44번째 줄 while문을 indegree[W]가 0이 될때까지 돌리는데
indegree배열을 초기화 안하시면 테스트케이스를 돌때마다 indegree배열에 저장된 값이 축적되서 엄청커집니다...
그래서 시간초과가 나는듯하네요...
아 무슨 말인지 이해했습니다. 감사합니다!
시간초과는 해결했네요... 근데 틀렸습니다에 대한 부분은 힌트 좀 주실 수 있나요?
질문 검색 다 돌아보면서 예제 다 확인했는데 다 맞는데....ㅠㅠ
답글 달아주신 @juhongkim2, @djm03178님 모두 감사드립니다!!
초기화에 대해서 한번 더 생각할 수 있는 시간이었습니다.
댓글을 작성하려면 로그인해야 합니다.
gkfkagkfka12 6년 전
위상정렬을 이용해서 풀었는데 시간초과가 발생합니다 ㅠㅠ
어떻게 개선할 수 있을까요?
질문검색에 있는 예제들로 답은 맞는것 같습니다.