본문 바로가기
백준(C++)/자료구조1

[BOJ/C++]11656번_접미사 배열

by 코잼민 2024. 7. 21.

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

##문제 풀기 전 알아야 할 개념 :

  • Iterator을 이용하여, String 객체의 원소를 조작하기 : erase()메소드

erase()메소드 :

ⓐ. String클래스의 인스턴스 메소드 => 호출법 : String 객체.erase()

ⓑ. 매개변수 : iterator의 String 객체의 포인터 : (or 객체 포인터 2개를 넣으면, 범위만큼 조작 가능)

ex_ String 객체인 word의  인덱스 4번째 원소를 지우기 => word.erase(word.begin() + 4);

ⓒ. 반환값 : void

  • C++ 에서 sort()메소드 vs qsort()메소드 차이 :

1_ Sort() 

ⓐ. 헤더파일 : <algorithm>

ⓑ. 호환성과 성능 : C++ 컨테이너와 많이 호환 , O(Nlog(N))으로 시간복잡도 성능도 좋은=ㅁ

ⓒ. 매개변수 : vector(or deque)의 첫 포인터 ,  vector(or deque)의 마지막 포인터, (람다식함수) :

ⓓ. 람다식 함수 사용 vs 안사용 :

  • 기본 함수 : operator < :
  • 람다식 함수 : vector의 원소 자료형을 int라 한다면, [] (int a, int b ) { return a op b}

ex_

2_ qsort() :

ⓐ. 헤더파일 : <cstdlib> => 이말은 즉, C++이 아닌 C언어의 헤더파일이라는 의미 (구식이라는 뜻)

ⓑ. 호환성과 성능 : C++ 컨테이너 호한 x (즉, 배열로 사용 [이것도 구식]) , 시간 복잡도는 Sort()가 더 좋다.

ⓒ. 매개변수 : vector(or deque)의 첫 포인터 ,  vector(or deque)의 마지막 포인터, (람다식함수) :

ⓓ. 단점 : const void* 포인터를 사용하기 때문에 -> ★sort보다 안정성이 떨어진다.

ex_

 

결론 : C++로 백준 정렬 문제 풀 때, 앞으로 qsort()가 아닌 sort()로 풀자

##노트 정리 :

 

##코드 :

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
void init() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}
 
int main() {
 
    init();
 
    vector <int> V = { 1,2,3,4,5 };
 
    sort(V.begin(), V.end(), [](int a, int b){
        return a < b;
        });
    //1 2 3 4 5?
 
    for (int i = 0; i < V.size(); i++) {
        cout << V[i] << ' ';
    }
    cout << '\n';
 
    return 0;
}
cs