작성
·
235
0
안녕하세요, 큰돌님
1912 연속합 문제를 풀던중, 시간 복잡도 관련해서 질문이 있습니다.
https://www.acmicpc.net/source/69965978
이 코드에서 시간 복잡도는 n * (n/2) 라서, 시간 초과가 뜨지 않을거라고 생각하는데, 시간 초과가 납니다.
for (int i = 0; i < n; i++){
for (int j = i+1; j < n; j++){
}
}
이게 O( n *(n/2)) 이고,
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
}
}
이게 O(n*n) 이라고 생각합니다
답변 1
0
안녕하세요 동훈님 ㅎㅎ
시간복잡도를 정의하고 -> 로직을 구축할 때 중요한점은.
문제범위를 보시고 시간복잡도를 어림잡아 계산해보는 것입니다.
문제를 보시면 n의 최대길이는 100,000입니다. 즉, n * n은 무려 10억이 됩니다. 1/ 2를 해도 5억이구요.
보통은...
시간복잡도가 1억 또는 천만이 넘어가면 안된다고 보시면 됩니다.
그래서 안되는 것 같습니다. 다른 방법으로 시간복잡도를 줄이셔야 합니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.