muscj7   5년 전

페이퍼의 가운데 인덱스로부터 8방+현위치(가운데)를 분할정복을 통해 탐색하면서 -1과 0과 1페이퍼의 개수를 구했습니다.

초기 사이즈가 1일 때, 3일 때, ~27일 일때 까지 다양한 케이스로 해봤지만 예외 케이스를 찾지 못했습니다.

제 알고리즘이 어디에 문제가 있는지 알고 싶습니다.

djm03178   5년 전

56번째 줄을 max <= 3일 때만 수행하는 것이 이상합니다.

9
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

muscj7   5년 전

djm님 또 감사합니다!.. 흠..생각을해서 한다는게 자꾸 저런 실수를 해버리네요..

muscj7   5년 전


***

제출 결과 


 메모리      속도

19876KB    548MS

와 같은 결과가 나왔습니다. 생각보다 속도가 느린 느낌인데

위 소스에서 속도에 영향을 주는 요인들이 뭐가 있는지 여쭤봐도 될까요??

djm03178   5년 전

다른 정답 코드들과 비교했을 때 특별히 느린 편은 아닌 것 같습니다. 이 프로그램에서 압도적으로 속도에 저하를 주는 요인은 입출력입니다. 같은 코드인데 scanf로 입력을 받으면 476MS가 나왔던 것이, fread로 fast I/O를 구현하니 68MS로 줄었습니다.

djm03178   5년 전

그 외에 시간이 좀 더 많이 걸리는 요인을 찾자면 매 호출마다 vector 객체가 하나 생성되고 파괴되는 것이 무겁다는 것과, 루프를 최대 3회씩 도는 것 정도를 뽑을 수 있을 것 같습니다.

muscj7   5년 전

아.. 그렇군요

fread를 이용하는 방법을 공부해봐야겠어요!

두 번째로 말씀해주신 벡터관련 프로그래밍 방식은 함수 호출이 잦은 알고리즘에서는 더 효율적인 방법을 생각해봐야겠군요 ㅠ ㅎㅎ 

늦은 시간 답변주셔서 감사합니다

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