https://www.acmicpc.net/problem/5430

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

이 문제에서 vector 의 erase와 string erase, find 함수를 사용했는데, 계속해서 시간초과가 났다.
vector erase함수를 O(1)로 생각해서 그렇게 썼는데, 실은 O(N)의 시간복잡도를 가지고 있었다..무지ㅋㅋ
그런 참에 시간복잡도를 정리해보려고 한다

Vector<T>
[],at를 통한 접근 - O(1)
find() - O(N)
insert(), erase() - O(N)
pop_back() - amortized O(1) 
push_back() - amortized O(1)

Deque<T>
[],at를 통한 접근 - O(1)
find() - O(N)
insert(), erase() - O(N)
pop_front() - O(1)
push_front() - O(1) 
pop_back() - O(1)
push_back() - O(1)

 

string
+= : O(N)
+ : O(N^2)
insert(),erase() - O(N)
find() - O(N) 


*amortized O(1)
보통 O(1)인데 capacity가 꽉차면 기존 메모리를 해제하고 새로운 메모리를 할당하여 옮기게 된다.
이 때 O(N)의 복잡도를 갖게된다. 즉 드물게 O(N)이 될수도 있다는 것이다.

*참고한 사이트
https://80000coding.oopy.io/cf49e471-7acb-4130-8654-fcfeed13bda5

 

[C++] vector STL method 시간복잡도

서론

80000coding.oopy.io

https://blog.naver.com/yoochansong/221739086178

 

C++ STL container 시간 복잡도 및 특징 비교.

==============&#...

blog.naver.com

https://sunho-doing.tistory.com/entry/CC-C-STL-deque

 

[C++] STL - deque

deque 덱은 벡터와 비슷한 배열 기반 시퀀스 컨테이너로서 반복자 및 멤버 함수가 거의 유사하다. 벡터와 다른 점은 덱은 push_front()와 pop_front()가 가능하다는 점이다. #include #include using namespace std;

sunho-doing.tistory.com

 

'프로그래밍 > C++' 카테고리의 다른 글

2873 롤러코스터 [C++]  (0) 2023.08.26
C++ 벡터, 문자열 삽입 및 삭제 연산 자료  (0) 2023.07.30
16197 두 동전 [C++]  (0) 2023.06.29
11404 플로이드 [c++]  (0) 2023.06.25
2841 외계인의 기타연주 [C++]  (0) 2023.06.14

+ Recent posts