재산쌓기에 2진수 10진수 변환같은거 다 추가하기
today_study쪽에 있는 내용 다 읽고 재산쌓기에 추가하기

C++은 Unmanaged 코드이고, C#은 Managed 코드인데
Unmanaged code는 .Net에서 실행할 수 없기 때문에 
C++코드를 Managed 코드로 변환해야 함
그 변환을 C++/CLI를 통해 할 수 있음

CLI = Common Language Infrastructure
공통 중간 언어
C++과 C#의 중간언어 느낌

CLR = Common Language Runtime
공용 언어 런타임
MS에서 제공하는 가상머신의 구성요소
자바 가상머신인 JVM같은 개념인 듯

닷넷으로 개발된 프로그램 코드는 CIL를 실행하는 것
이때 CIL은 바이트코드 형태로 구성되어 있음

visual studio에서 닷넷 언어를 컴파일하면 CIL이 생성됨
컴파일 후 실행하면 이 바이트 코드를 Native 코드로 컴파일 한 후 실행시킴
이때 CLR이 CIL를 OS가 이해할 수 있는 Native 코드로 변환하는 역할을 함

닷넷 가상머신덕에 C#뿐 아니라 다른 언어로 개발된 IL들은 모두 닷넷 프레임워크가 설치된 어떠한 환경에서도 실행이 가능해짐





입력값이 많더라도 숫자의 범위가 적으면 정렬하는것보다는 count하는 방식이 나을 수 있다
숫자 범위가 0~10000이라면
array[10001] 해버리고 input 받고 array[input]++ 하는 방식으로 카운트하고
결과를 출력하는게 정렬하는것보다 시간 훨씬 적게 걸린다





람다식 pred 부분에서 길이가 짧은 문자열이 앞에 오고 싶다면
if (a.length() == b.length()) return a < b;
return a.length() < b.length();
형태로 구성해야 한다.
그냥 a<b 하면 안되고 a.length() < b.length()




기본적으로 algorithm의 sort함수는 불안정정렬이다
안정정렬이 필요한 경우 stable_sort 함수를 지원하니 사용하면 된다
안정정렬 : 입력될때 값이 같은 애들은 정렬할때도 순서가 바뀌지 않고 유지되는 정렬 방식


lower_bound(v.begin(), v.end(), 0) - v.begin()     => lower_bound는 x이상인 첫번째 원소의 위치 반환
upper_bound(v.begin(), v.end(), 0) - v.begin()    => upper_bound는 x초과인 첫번째 원소의 위치 반환


최빈값 구할때 map 활용했는데
first인 키값으로 기본정렬 되는건데 second로 정렬한거라고 착각하고 삽질 오래했음
그냥 unordered_map 활용해서 값 다 넣고
벡터로 옮겨준 다음에 second 기준으로 sort하고 써야 함