본문 바로가기
개발/C++

C++ String 사용할 때, 시간복잡도 줄이는 법

by parkkingcar 2023. 7. 13.

 

 

문자열 s  뒤에 "A"를 10만 번  더하는 경우, 아래 케이스에서 for 연산을 10만 번 반복합니다.

 

 

1번 케이스 

 

함수실행시간  :  0.004013s

#include <iostream>
#include <string>
#include <ctime>

using namespace std;


int main() {
    clock_t start, finish;
    double duration;
    string s;
    int n = 100000;
    start = clock();
    
    for (int i = 0; i < n;i++) {
        s += "A";
    }

    finish = clock();
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    cout << duration;
    return 0;
}

 

 

 

2번 케이스

 

함수실행시간  :  0.743712s

#include <iostream>
#include <string>
#include <ctime>

using namespace std;


int main() {
    clock_t start, finish;
    double duration;
    string s;
	
    int n = 100000;
	
    start = clock();
    for (int i = 0;i < n;i++) {
        s = s + "A";
    }
	
    finish = clock();
	
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    cout << duration;
    return 0;
}

 

 

1번 케이스는 O(N)의 시간복잡도, 2번 케이스는 O(N^2)의 시간복잡도를 가집니다.

 

1번 케이스는 문자열 s의 마지막에 "A"가 추가되는 방식으로 돌아갑니다. 2번 케이스는 매번 새로운 문자열을 만든다고 할 수 있습니다. 즉, 2번 케이스는 1번 케이스의 연산을 n번 더 실행하게 되므로 위와 같은 시간복잡도를 가지게 됩니다.

 

 

 

결론은 C++에서 문자열 뒤에 문자를 추가할 때, += 을 사용해야 실행시간을 줄일 수 있습니다.

 

 

 

 

 

 

참고자료

 

정말 놀라운 C++ string의 시간 복잡도

[1번 케이스] #include #include using namespace std; int main() { string s; int n = 100000; for (int i = 0;i < n;i++) { s += "A"; } return 0; } 이것은 O(N)의 복잡도가 걸린다 [2번 케이스] #include #include using namespace std; int main() {

foxtrotin.tistory.com

 

'개발 > C++' 카테고리의 다른 글

[C++] String 공백 분리  (0) 2023.05.18
[C++] 우선순위 큐(Priority Queue)  (0) 2022.12.02

댓글