11월에 공부했던 내용 전체 복습 및 코드들 정리해서 push

아래 내용들은 공부는 했는데 써먹어본적이 없어서 잊혀졌던 것들 복습을 위해 킵

 

 

 

 

소인수 구할때
2나 5만 괜찮고 나머지는 안된다라고 했을때 4라던가 8이라던가 25같은것도 신경써야함
while(i%2 == 0) {i/=2;} 처럼 해서 2로 만들어버리고 비교하는 방식으로


나눗셈은 특별하다. 나눗셈 누를때마다 항상 이 생각이 저절로 들어야한다
1) 0으로 나누고 있진 않은가
2) 나눈 결과가 소수라서 데이터소실이 있지는 않은가
항상 생각해야한다


sort : 일반적인 정렬함수
partial_sort : 배열의 일부분만 정렬함
stable_sort : 정렬을 하되 원소들 간의 순서를 보존함


vec.erase(remove(vec.begin(), vec.end(), 3), vec.end()); => 3을 제거해줌


함수객체 형태
struct is_odd {
  bool operator()(const int& i) { return i % 2 == 1; }
};


모든 원소 수정은 transform
any_of / all_of의 존재 잊지 않기


뒤집기
#include <algorithm>
reverse(vec.begin(), vec.end()); 
// 1,2,3,4,5가 들어있던 vec를 reverse하면 5,4,3,2,1이 된다
문자열 뒤집기도 가능
reverse(str.begin(), str.end()); 하면 문자열도 잘 뒤집혀짐



rotate
벡터의 값들을 한칸씩 옮기면서 회전시킴
#include <algorithm>
rotate(v.begin(), v.begin() + 1, v.end()); // 한칸씩 왼쪽 이동
rotate(v.begin(), v.end() - 1 , v.end()); // 한칸씩 오른쪽 이동
// (시작반복자, 첫위치로 올 반복자, 종료반복자)
인덱스 1번이 첫위치로 간다는건 왼쪽으로 이동인 셈이고
인덱스 마지막이 첫위치로 간다는건 오른쪽으로 이동인 셈이니까


입력형태가 무조건 고정되어 있다면
stringstream ss;
ss.str(s);
ss>>a>>op>>b>>eq>>c;
위처럼 아예 시작부터 다 넣어버리고 해도 된다.
예를들어 a + b = c 형태로만 들어온다면
위 형태로 다 넣고 시작하면 a, b, c 변수로만 쉽게 풀어나갈 수 있음


0LL 이라고 쓰면 long long 으로 0취급
0 으로 그냥 쓰면 그냥 int로 0 취급


보이어-무어 알고리즘을 쓰면 
문자열에서 그냥 find를 쓰는것보다 훠얼씬 빠르다
코드는 property string에 남겨둠