알고리즘 스터디하다가 두 컨테이너의 메서드간 연산 속도 차이가 발생하는 걸 알게되어서 찾아봄
(물리적으로) 연속적인 메모리
미리 공간을 할당해놓음
각 요소는 해당 타입만큼의 공간을 요구함
요소를 추가/제거할 때마다 전체 메모리를 다시 할당해야할 수도 있음
해당 요소에 임의로 접근이 가능
벡터에 요소를 추가/제거하면 반복자(iterator)가 무효화됨
개별 원소 접근 가능
마지막에 요소를 추가/제거하면 빠름
랜덤하게 원소 순회 가능
인덱싱 비용이 작음
#include <bits/stdc++.h>
: 자주 쓰는 헤더들을 모두 포함 시키고 있는 헤더 0.1 + 0.1 + 0.1 != 0.3
float
: 상대 오차가 까지 안전double
: 상대 오차가 까지 안전bool cmp1(vector<int> v1, vector<int> v2, int i) {
return v1[i] > v2[i];
}
bool cmp2(vector<int> &v1, vector<int> &v2, int i) {
return v1[i] > v2[i];
}
getline
사용ios::sync_with_stdio(false); // 1
cout.tie(nullptr); // 2
cin.tie(nullptr); // 3
1) scanf
/printf
에서 쓰는 C stream과 cin
/cout
에서 쓴 C++ stream은 분리되어있음. 그래서 기본적으로 두 stream을 동기화 시켜줘야 함께써도 ㄱㅊ은데, 코테 때는 굳이..? 해당 동기화에 시간을 쓸 필요가 없기 때문에 동기화를 해제시켜주는 명령어cin
수행전, cout
버퍼를 비워주는 작업이 있다. 그런데 코딩테스트 채점 시스템은 "출력"만 확인하기 때문에, 콘솔창에서 입출력 순서가 꼬여도 채점에 영향 X. endl
: 개행문자를 출력하고 출력 버퍼를 비우라는 뜻 > 사용하지 마셈push_back()
,pop_back()
: O(1)push_front()
, pop_front()
: O(n)=
을 사용하면 Deep Copysize()
메서드는 unsigned int 를 반환if (i==0 || j==0)
LCS[i][j] = 0;
else if (A[i] == B[j])
LCS[i][j] = LCS[i-1][j-1] + 1;
else
LCS[i][j] = 0
if (i==0 || j==0)
LCS[i][j] = 0;
else if (A[i] == B[j])
LCS[i][j] = LCS[i-1][j-1] + 1;
else
LCS[i][j] = max(LCS[i-1][j], LCS[i][j-1]);
https://stackoverflow.com/questions/2209224/vector-vs-list-in-stl
https://blog.encrypted.gg/category/%EA%B0%95%EC%A2%8C/%EC%8B%A4%EC%A0%84%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
https://www.acmicpc.net/problem/9251