첫째로 Indentation이 전혀 되어있지 않습니다.
ls 배열의 크기를 확인해보세요.
1764번 - 듣보잡
먼저, 배열의 크기가 충분히 클 경우 "시간 초과"가 나는 이유는, 본 알고리즘의 시간 복잡도가 O(NM)이기 때문입니다.
일반적으로 연산량이 1억 이내일 경우, 컴퓨터가 1초 안에 돌 수 있다고 생각합니다. 허나, 본 문제에서 NM = 2.5 * 1011로 매우 큽니다. 따라서 본 소스 코드가 1초 안에 돌기를 기대하기는 어렵습니다.
배열의 크기가 위와 같이 "500" 정도로 작을 경우, 소스 코드 실행 이후 1초 이내에 "런타임 에러"가 발생하여 강제 종료될 수 있습니다. 이 경우 BOJ는 "시간 초과"가 아닌 "런타임 에러" 판정을 내립니다.
18번째 줄부터 26번째 줄까지 코드의 시간 복잡도를 계산하면,
(i) 18번째 줄의 for문에 의하여 19번째 줄부터 25번째 줄까지 코드가 ssu번 실행되며
(ii) 19번째 줄의 for문에 의하여 20번째 줄부터 24번째 줄까지 코드가 lsu번 실행됩니다.
고로 본 소스 코드는 최소 ssu*lsu번 이상 연산을 한다고 생각할 수 있습니다.
lsu = N이고 ssu = M입니다. N과 M은 최대 500,000 이므로, N = M = 5 * 105인 데이터에 대하여 적어도 (5 * 105) * (5 * 105) = 2.5 * 1011번 연산을 합니다.
"알고리즘의 시간 복잡도"에 대하여 공부해보세요.
댓글을 작성하려면 로그인해야 합니다.
kuyoung05 5년 전
런타임 에러가 나네요 뭐가 문제나요?