Lv.0에서 안푼 문제 => 이진수 더하기, 구슬을 나누는 경우의 수


1. range based for
- for문의 다른 사용법
- 기존에 사용하던 방식
for(int i=0; i<str.length(); i++)
{
}
- 새로운 방식
for(char c : str)
{
}
이 방식으로 사용하면 c에 str의 첫 인자부터 하나씩 들어가며 반복됨



2. 소문자 대문자 숫자 알파벳 공백 확인 및 변경
// #include <string> // 없어도 되는 듯 한데 컴파일러마다 다를 수 있으니 적어둠


char c;
if(isupper(c)) // 대문자라면 true
if(islower(c)) // 소문자라면 true

toupper(c) // 대문자로 변경
tolower(c) // 소문자로 변경

if(isdigit(i)) // 숫자라면 true

isspace // 공백인지 판별
isalpha // 알파벳인지 판별



3. 최소공배수는 두 수의 곱 나누기 최대공약수
- 최소공배수는 영어로 lcm
- 최대공약수는 영어로 gcd

최소공배수는 두 수의 곱 나누기 최대공약수
즉 lcm = a * b / gcd(a, b);

함수로 구현하려면
#include <numeric>
gcd(a, b);
lcm(a, b);




4. 최댓값 만들기 (2)에서
입력값이 -1, -2가 들어오면 최댓값은 -1인데
변수 초기화를 0으로 해버리면 0과 비교해서 최댓값이 계속 0에서 안바뀜
즉 최댓값 만들기 할때는 초기화를 가능한 가장 작은 수로 해야함



5. long long num 같은 변수는 string to int 하려면 stoi가 아니라 stoll을 해야한다...



6. stoi(buffer); 사용시 자꾸 core dump뜨는 가장 큰 이유는 
buffer가 비어있기 때문이다
그러니 항상 if(buffer != "") 을 앞에 붙여주자
★ 포인터나 문자열에 접근하기 전에는 항상 != null 확인하는 습관 들여야함



7. min, max 함수로 두 숫자 중 더 큰 수, 작은 수를 쉽게 찾을 수 있다
여러 수면 두개씩 여러번 쓰면 된다
이걸 몰라서 if로 계속 반복하다가 시간낭비 엄청 했다.



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



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


10. 이중벡터에는 push_back으로 int값 못넣는다
vector<vector<int>> a;가 있다면
a.push_back(1);같은건 불가능하고
vector<int> b; 를 만들어서 b.push_back(1); 해준 후에
a.push_back(b);로 넣어줘야 한다

///////////////////////////////////////////

공부해야할것

이진수 다루는 bitset에 대해 공부해봐야 할듯
=> 공부하고 나서 레벨0 이진수 더하기 풀어보기

★★★★stringstream에 대해 알아보기

pair <int,int> p 라고 선언하고 p.first와 p.second로 접근 가능
이런 템플릿에 대해 공부 많이 해봐야 할듯