allen246   3년 전

일단 답은 잘 나오는데.. 랜덤으로 N 한계치 넣어봤더니 16초나 걸리네요..

명확하게는 sort도 아니고 그냥 넣은거 출력하는 정도인데 왜 이런 걸까요?

범위도 1~10,000 정도로 작아서 카운팅 정렬에 적합하다고 생각하는데

입력문제인 것 같아서 Scanner.nextInt()로 입력받아도 출력이 항상 늦네요

이유가 뭔지 가르쳐주시면 감사하겠습니다

allen246   3년 전

음 일단 답변 달아주신건 감사합니다만,

1. 처음 입력받는 n이라는 변수는 단 한번 세팅되기때문에 for range 안에 넣더라도 속도에 관해서는 차이가 전혀 없습니다. 이 문제의 경우에는 for loop안의 내용이 더 중요한거죠

2. "arr[sc.nextInt()]++ 라는 부분을 until n까지 반복하면 메모리 초과가 안나는게 오히려 대단한거죠" 라고 하셨는데, 이미 arr은 초기화가 된 상태이며, 저 statement는 arr 내부의 정수값만을 증가시킨다는 의미이기 때문에 메모리 초과와는 관련이 없습니다

3. 제가 여쭤본 것은 처음부터 알고리즘 구조상의 효율이기 때문에... 혹시 알고리즘상의 오류도 발견하시게되면 말씀해주시면 감사하겠습니다~

tor012   3년 전

입력과 출력모두 개선해야합니다.

출력만 개선(시간초과) : http://boj.kr/6db41e68478e4677...

입력, 출력 개선(2754ms) : http://boj.kr/d9089b37521644e9...

최대 1000만줄에 대한 입,출력이라 출력개선의 영향이 크지 않을까 했는데

Java Scanner도 느린 입력방식이기에(Java BufferedReader에 비해서) 위와 같은 결과가 나오는 듯 합니다.

jvm의 시간제한이 3000ms로 c계열과 같게 잡혀서 보정이 빡빡하게 이뤄진 듯 합니다.

정답을 맞으신 뒤 kotlin(jvm) 제출자들의 소스를 보시고 입출력에 대한 실제 수행시간 차이도 찬찬히 살펴보시면 좋을듯합니다.

allen246   2년 전

친절한 답변 감사합니다!

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