realsorin   4년 전

제출하면 바로 시간초과가 떠버리는데 어디에서 유독 시간을 잡아먹고 있는건지 잘 모르겠네요..

어느 부분을 개선하면 좋을지요ㅜㅜ

chogahui05   4년 전

(1) Arrays.sort

그런데 이건 그냥 Object를 정렬하는 것이니. 잠시만요. 함 봐볼게요.

c6043a81-f838-4d3d-8438-d253a437db56

호출 경로를 쭉 따라들어가니, Timsort나 MergeSort를 호출하네요.

이 둘은 상당히 빠른 정렬입니다. 그런데 여기에서는 어떤 식으로 호출하는지는 모르겠군요.

만약에 이게 아니라면 다른 문제인데..

(2) bw.flush() 함수를 테케마다 호출하시지 마시고

한꺼번에 해 보세요. 그러니까, 테케 다 끝나고 마지막에 bw.flush()를 한 번만 호출해 보세요.

(3) 그런데 (2)를 적용했는데도 시간 초과라면

(1)이 문제겠지요..?

그러면 Array.sort를 Collections.sort로 바꿔봅시다.

이는 point를 Array가 아닌, ArrayList를 써서 관리해 주시면 됩니다.

realsorin   4년 전

감사합니다ㅜㅜ!

안 그래도 지금 계속 풀고 있었는데 말씀하신 대로 ArrayList로 바꾸니 시간 초과는 해결이 되었구요.

그런데 그거 말고도 짜잘하게 잘못 짠 부분들이 있어서 고쳐서 아래 소스로 통과했습니다.

keunbum   4년 전

@chogahui05

저.. 지나가던 사람입니다만

잘 이해가 안되는게 왜 Collections.sort가 Arrays.sort 보다 빠른 건가요?

둘다 어차피 내부적으로는 팀소트나 머지소트를 똑같이 쓰는 것 아닌가요?

----------------------------------------------------------------------------------------------

검색해보니

https://www.acmicpc.net/blog/view/58

데이터의 특성에 따라 실행 속도 우위가 달라질 수 있네요..

(어떤 이유에선지 모르겠지만 그 차이를 인정한다면)

그러면 문제 데이터의 특성을 파악해서 적절한 정렬 메서드를 호출하는 것도

코더의 몫인 건가요?


chogahui05   4년 전

primitive type으로 배열을 선언하시고

Arrays.sort를 호출해 보세요. F5를 누르시면서 디버깅 해 보시면 아실 수 있을 듯 싶습니다.

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