C++ 문법 및 편법
1. 소수점 고정하기
cout<<fixed;
cout.precision(2);
// 소수점 2째자리까지 고정
2. 실행속도 높이기
std::ios::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
std::cout << '\n' 사용하기 std::endl 사용하면 속도가 느려집니다.
3. 백준에서 여러번 입력받는 경우 사용할 수 있는 방법
int t; cin t;
while (t--) {
}
4. for문을 간략화하는 방법 및 파이썬 같은 for문 사용방법
string name = "name";
for( auto & i : name)
cout << i;
// 기존의 for문과 차이점은 i가 index가 아니라 value 를 가리키고 있음.
문자열
1. 문자열의 모든 문자 띄어쓰기 제거
str.erase(remove(str.begin(), str.end(), ' '), str.end());
' '를 다른거로 바꾸면 다르게 응용 가능
2. 문자열 정렬하기
#include algorithm
sort(str.begin(), str.end());
3. 문자열 뒤집기
reverse(str.begin(), str.end());
이를 응용하여 오름차순 정렬이 가능함
#include algorithm
sort(str.begin(), str.end());
reverse(str.begin(), str.end());
4. 공백 문자 포함해서 입력 받기
getline(cin, s);
// cin의 경우 띄어쓰기로 구분한다.
// cin과 함께 쓰는 경우 cin 다음에 cin.ignore(); 이 나와야한다.
// 만약 띄어쓰기로 구분된 항목을 입력받는다면
5. 공백 문자 포함해서 입력 받아야 하는데, cin을 같이 사용하는 경우
std::cin >> t;
std::cin.ignore();
// 버퍼를 지워야합니다.
6. 공백 문자 포함해서 입력 받아서 모두 소문자로 변환하는 방법
getline(cin, input);
int size = input.length();
for (int i = 0; i < size; i++)
{
input[i] = tolower(input[i]);
}
7. EOF까지 입력받는법
while(t < 50 || !std::cin.eof()){
getline(std::cin, line);
sentence += line;
t++;
}
이거 아니면 저거
while(true){
string inp;
cin >> inp;
if(cin.eof())
break;
}
체점시에는 자동으로 들어가지만 디버깅때는 ctrl + z 를 입력해야함.
Vector
1. Vector 정렬하기
#include algorithm
sort(v.begin(), v.end());
2. Vector에서 원하는 값의 index를 찾기
std::vector<int> v = { 10000, 75, 20, 36, 47, 40, 6, 10 };
std::cout << find(v.begin(), v.end(), 20) - v.begin() << std::endl;
// 20은 2번째 자리에 있다.
std::cout << find(v.begin(), v.end(), 1) - v.begin() << std::endl;
// 1은 없다. 그러므로 length()의 값이 리턴된다. 여기서는 8이 리턴된다.
3. Vector 에서 인덱스로 지우기
v.erase(v.begin() + i)
// i번째 원소를 삭제한다.
4. Vector 에서 중복값 제거하기
vector< > v;
sort(v.begin(), v.end());
// 정렬을 하고
unique(v.begin(), v.end());
// unique는 중복되는 값을 삭제하지만, vector에 할당된 메모리는 그대로이다.
// unique가 완료되면 값이 지정되어 있지 않은 index를 반환한다. 그 index부터 erase를 시키면 된다.
// 그러니 5번 줄 말고 다음의 코드를 입력하면 중복값이 제거된다.
s.erase(unique(v.begin(), v.end()),s.end());
5. Vector 에서 큰 수, 큰 수의 인덱스, 작은 수, 작은 수의 인덱스 찾기
int max = *max_element(v.begin(), v.end());
// 가장 큰 수가 리턴
int max_index = max_element(v.begin(), v.end())-v.begin();
// 가장 큰 수의 인덱스가 리턴
int min = *min_element(v.begin(), v.end());
// 가장 작은 수가 리턴
int min_index = min_element(v.begin(), v.end())-v.begin();
// 가장 작은 수의 인덱스가 리턴
6. 2차원 Vector에서 2차원에 있는 특정한 값으로 정렬을 시키고 싶다면
// 매개변수 타입은 변경될 수 있음.
bool compare(const std::vector<std::string>& a, const std::vector<std::string>& b) {
return a[0] > b[0];
}
sort(answer.begin(), answer.end(), compare);
예를 들자면 V[0][1] 의 value로 정렬을 시키고 싶다면
7. Vector 중간에 값을 삽입하기
v.insert(v.begin() + insert, value);
8. Vector 선언과 동시에 초기화하기 (모든 컨테이너 동일)
std::vector<int> v(5); // 0으로 초기화하는 5개
std::vector<int> v(5, 1); // 1으로 초기화하는 5개
std::vector<int> v = {1, 2, 3, 4, 5}
9. 2차원 Vector 선언하는 방법
vector<vector<int>> v;
원래는 벡터를 하나더 사용하면서 v.push_back으로 삽입하면 되지만 다음처럼 사이즈를 바로 정해줄 수 있다.
vector<vector<int> A(1, vector<int>(1,0));
STACK
1. stack 활용
#include<stack>
stack<int> s;
// 스택생성
s.push(1);
// 스택에 1을 넣는다.
while(!s.empty()){
int a = s.top();
s.pop();
}
// 스택이 빌때까지 while문을 돈다.
// 이론상으로는 pop에서 반환값이 있지만, STL에서는 없다는 것에 주의한다.
MAP
1. 자동으로 정렬을 해야한다면 Hash_map 을 사용하고, 정렬이 필요없다면 map을 사용한다.
#include<map>
std::map< , > words; // 선언
words.insert({ , }); // 삽입
2. Map에서 특정한 값을 찾아야한다면 " " 안에 있는게 key가 됨
std::map< , > ::iterator it = words.find(" ");
if (it != words.end()) {
}
else {
}
4. Map의 모든 원소를 하나하나 보고싶을때
std::map< , > ::iterator it;
for (it = words.begin(); it != words.end(); ++it) {
'ㅇ 공부#언어 > (C++) 알고리즘' 카테고리의 다른 글
(C++) 코딩테스트 1. 시간복잡도와 디버깅 / 2. 자료구조(1/2) (0) | 2023.05.04 |
---|---|
(C++)알고리즘 탐구 5. 브루트 포스 (1/2) (풀이, 알고리즘 분석) (1) | 2023.04.05 |
(C++)알고리즘 탐구 4. 애너그램 그룹 (풀이, 남의 코드 분석) (1) | 2023.04.02 |
(C++)알고리즘 탐구 3. 가장 많은 글자. (풀이, 남의 코드 분석) (0) | 2023.04.01 |
(C++)알고리즘 탐구 2. 문자열 뒤집기(풀이, 남의 코드 분석) (0) | 2023.03.31 |